From 031076b4986925baf1afef0b82dd14e9467bd17e Mon Sep 17 00:00:00 2001 From: amithkoujalgi Date: Fri, 26 Sep 2025 23:35:46 +0530 Subject: [PATCH] Update readme --- README.md | 49 +- metrics.png | Bin 0 -> 382113 bytes .../OllamaAPIIntegrationTest.java | 3344 ++++++++--------- 3 files changed, 1591 insertions(+), 1802 deletions(-) create mode 100644 metrics.png diff --git a/README.md b/README.md index 37e35fc..3260469 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@
ollama4j-icon - ### Ollama4j +### Ollama4j +
@@ -40,15 +41,53 @@ _Find more details on the **[website](https://ollama4j.github.io/ollama4j/)**._ ## Table of Contents +- [Table of Contents](#table-of-contents) +- [Capabilities](#capabilities) - [How does it work?](#how-does-it-work) - [Requirements](#requirements) - [Installation](#installation) -- [API Spec](https://ollama4j.github.io/ollama4j/category/apis---model-management) + - [For Maven](#for-maven) + - [Using Maven Central](#using-maven-central) + - [Using GitHub's Maven Package Repository](#using-githubs-maven-package-repository) + - [For Gradle](#for-gradle) + - [API Spec](#api-spec) - [Examples](#examples) -- [Javadoc](https://ollama4j.github.io/ollama4j/apidocs/) - [Development](#development) -- [Contributions](#get-involved) -- [References](#references) + - [Setup dev environment](#setup-dev-environment) + - [Build](#build) + - [Run unit tests](#run-unit-tests) + - [Run integration tests](#run-integration-tests) + - [Releases](#releases) +- [Get Involved](#get-involved) +- [Who's using Ollama4j?](#whos-using-ollama4j) +- [Growth](#growth) + - [References](#references) + - [Credits](#credits) + - [Appreciate the work?](#appreciate-the-work) + +## Capabilities + +- **Text generation**: Single-turn `generate` with optional streaming and advanced options +- **Chat**: Multi-turn chat with conversation history and roles +- **Tool/function calling**: Built-in tool invocation via annotations and tool specs +- **Reasoning/thinking modes**: Generate and chat with “thinking” outputs where supported +- **Image inputs (multimodal)**: Generate with images as inputs where models support vision +- **Embeddings**: Create vector embeddings for text +- **Async generation**: Fire-and-forget style generation APIs +- **Custom roles**: Define and use custom chat roles +- **Model management**: List, pull, create, delete, and get model details +- **Connectivity utilities**: Server `ping` and process status (`ps`) +- **Authentication**: Basic auth and bearer token support +- **Options builder**: Type-safe builder for model parameters and request options +- **Timeouts**: Configure connect/read/write timeouts +- **Logging**: Built-in logging hooks for requests and responses +- **Metrics & Monitoring** 🆕: Built-in Prometheus metrics export for real-time monitoring of requests, model usage, and + performance. *(Beta feature – feedback/contributions welcome!)* - + Checkout [ollama4j-examples](https://github.com/ollama4j/ollama4j-examples) repository for details. + +
+ ollama4j-icon +
## How does it work? diff --git a/metrics.png b/metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..cc811976afcf1ec58ec01a7f001098445639a5a2 GIT binary patch literal 382113 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 dQi8s4X3%4Miq}6ZI#4aNdbDnukOm$N%2R> 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%0AkD&bb;} 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 FngBH?91Q>f literal 0 HcmV?d00001 diff --git a/src/test/java/io/github/ollama4j/integrationtests/OllamaAPIIntegrationTest.java b/src/test/java/io/github/ollama4j/integrationtests/OllamaAPIIntegrationTest.java index 8575356..741956b 100644 --- a/src/test/java/io/github/ollama4j/integrationtests/OllamaAPIIntegrationTest.java +++ b/src/test/java/io/github/ollama4j/integrationtests/OllamaAPIIntegrationTest.java @@ -10,1835 +10,1585 @@ package io.github.ollama4j.integrationtests; import static org.junit.jupiter.api.Assertions.*; +import io.github.ollama4j.OllamaAPI; +import io.github.ollama4j.exceptions.OllamaBaseException; +import io.github.ollama4j.impl.ConsoleOutputChatTokenHandler; +import io.github.ollama4j.impl.ConsoleOutputGenerateTokenHandler; import io.github.ollama4j.models.chat.*; +import io.github.ollama4j.models.embed.OllamaEmbedRequestModel; +import io.github.ollama4j.models.embed.OllamaEmbedResponseModel; +import io.github.ollama4j.models.generate.OllamaGenerateRequest; +import io.github.ollama4j.models.generate.OllamaGenerateRequestBuilder; +import io.github.ollama4j.models.generate.OllamaGenerateStreamObserver; +import io.github.ollama4j.models.response.Model; +import io.github.ollama4j.models.response.ModelDetail; +import io.github.ollama4j.models.response.OllamaResult; import io.github.ollama4j.samples.AnnotatedTool; +import io.github.ollama4j.tools.OllamaToolCallsFunction; +import io.github.ollama4j.tools.Tools; import io.github.ollama4j.tools.annotations.OllamaToolService; +import io.github.ollama4j.utils.OptionsBuilder; +import java.io.File; +import java.io.IOException; import java.util.*; +import java.util.concurrent.CountDownLatch; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.testcontainers.ollama.OllamaContainer; @OllamaToolService(providers = {AnnotatedTool.class}) @TestMethodOrder(OrderAnnotation.class) @SuppressWarnings({"HttpUrlsUsage", "SpellCheckingInspection", "FieldCanBeLocal", "ConstantValue"}) class OllamaAPIIntegrationTest { private static final Logger LOG = LoggerFactory.getLogger(OllamaAPIIntegrationTest.class); - // - // private static OllamaContainer ollama; - // private static OllamaAPI api; - // - // private static final String EMBEDDING_MODEL = "all-minilm"; - // private static final String VISION_MODEL = "moondream:1.8b"; - // private static final String THINKING_TOOL_MODEL = "deepseek-r1:1.5b"; - // private static final String THINKING_TOOL_MODEL_2 = "qwen3:0.6b"; - // private static final String GENERAL_PURPOSE_MODEL = "gemma3:270m"; - // private static final String TOOLS_MODEL = "mistral:7b"; - // + + private static OllamaContainer ollama; + private static OllamaAPI api; + + private static final String EMBEDDING_MODEL = "all-minilm"; + private static final String VISION_MODEL = "moondream:1.8b"; + private static final String THINKING_TOOL_MODEL = "deepseek-r1:1.5b"; + private static final String THINKING_TOOL_MODEL_2 = "qwen3:0.6b"; + private static final String GENERAL_PURPOSE_MODEL = "gemma3:270m"; + private static final String TOOLS_MODEL = "mistral:7b"; + + /** + * Initializes the OllamaAPI instance for integration tests. + * + *

This method sets up the OllamaAPI client, either using an external Ollama host (if + * environment variables are set) or by starting a Testcontainers-based Ollama instance. It also + * configures request timeout and model pull retry settings. + */ + @BeforeAll + static void setUp() { + // ... (no javadoc needed for private setup logic) + int requestTimeoutSeconds = 60; + int numberOfRetriesForModelPull = 5; + + try { + String useExternalOllamaHostEnv = System.getenv("USE_EXTERNAL_OLLAMA_HOST"); + String ollamaHostEnv = System.getenv("OLLAMA_HOST"); + + boolean useExternalOllamaHost; + String ollamaHost; + + if (useExternalOllamaHostEnv == null && ollamaHostEnv == null) { + Properties props = new Properties(); + try { + props.load( + OllamaAPIIntegrationTest.class + .getClassLoader() + .getResourceAsStream("test-config.properties")); + } catch (Exception e) { + throw new RuntimeException( + "Could not load test-config.properties from classpath", e); + } + useExternalOllamaHost = + Boolean.parseBoolean( + props.getProperty("USE_EXTERNAL_OLLAMA_HOST", "false")); + ollamaHost = props.getProperty("OLLAMA_HOST"); + requestTimeoutSeconds = + Integer.parseInt(props.getProperty("REQUEST_TIMEOUT_SECONDS")); + numberOfRetriesForModelPull = + Integer.parseInt(props.getProperty("NUMBER_RETRIES_FOR_MODEL_PULL")); + } else { + useExternalOllamaHost = Boolean.parseBoolean(useExternalOllamaHostEnv); + ollamaHost = ollamaHostEnv; + } + + if (useExternalOllamaHost) { + LOG.info("Using external Ollama host: {}", ollamaHost); + api = new OllamaAPI(ollamaHost); + } else { + throw new RuntimeException( + "USE_EXTERNAL_OLLAMA_HOST is not set so, we will be using Testcontainers" + + " Ollama host for the tests now. If you would like to use an external" + + " host, please set the env var to USE_EXTERNAL_OLLAMA_HOST=true and" + + " set the env var OLLAMA_HOST=http://localhost:11435 or a different" + + " host/port."); + } + } catch (Exception e) { + String ollamaVersion = "0.6.1"; + int internalPort = 11434; + int mappedPort = 11435; + ollama = new OllamaContainer("ollama/ollama:" + ollamaVersion); + ollama.addExposedPort(internalPort); + List portBindings = new ArrayList<>(); + portBindings.add(mappedPort + ":" + internalPort); + ollama.setPortBindings(portBindings); + ollama.start(); + LOG.info("Using Testcontainer Ollama host..."); + api = + new OllamaAPI( + "http://" + + ollama.getHost() + + ":" + + ollama.getMappedPort(internalPort)); + } + api.setRequestTimeoutSeconds(requestTimeoutSeconds); + api.setNumberOfRetriesForModelPull(numberOfRetriesForModelPull); + } + + /** + * Verifies that a ConnectException is thrown when attempting to connect to a non-existent + * Ollama endpoint. + * + *

Scenario: Ensures the API client fails gracefully when the Ollama server is unreachable. + */ + @Test + @Order(1) + void shouldThrowConnectExceptionForWrongEndpoint() { + OllamaAPI ollamaAPI = new OllamaAPI("http://wrong-host:11434"); + assertThrows(OllamaBaseException.class, ollamaAPI::listModels); + } + + /** + * Tests retrieval of the Ollama server version. + * + *

Scenario: Calls the /api/version endpoint and asserts a non-null version string is + * returned. + */ + @Test + @Order(1) + void shouldReturnVersionFromVersionAPI() throws OllamaBaseException { + String version = api.getVersion(); + assertNotNull(version); + } + + /** + * Tests the /api/ping endpoint for server liveness. + * + *

Scenario: Ensures the Ollama server responds to ping requests. + */ + @Test + @Order(1) + void shouldPingSuccessfully() throws OllamaBaseException { + boolean pingResponse = api.ping(); + assertTrue(pingResponse, "Ping should return true"); + } + + /** + * Tests listing all available models from the Ollama server. + * + *

Scenario: Calls /api/tags and verifies the returned list is not null (may be empty). + */ + @Test + @Order(2) + void shouldListModels() throws OllamaBaseException { + List models = api.listModels(); + assertNotNull(models, "Models should not be null"); + assertTrue(models.size() >= 0, "Models list can be empty or contain elements"); + } + + @Test + @Order(2) + void shouldUnloadModel() { + final String model = GENERAL_PURPOSE_MODEL; + assertDoesNotThrow( + () -> api.unloadModel(model), "unloadModel should not throw any exception"); + } + + /** + * Tests pulling a model and verifying it appears in the model list. + * + *

Scenario: Pulls an embedding model, then checks that it is present in the list of models. + */ + @Test + @Order(3) + void shouldPullModelAndListModels() throws OllamaBaseException { + api.pullModel(EMBEDDING_MODEL); + List models = api.listModels(); + assertNotNull(models, "Models should not be null"); + assertFalse(models.isEmpty(), "Models list should contain elements"); + } + + /** + * Tests fetching detailed information for a specific model. + * + *

Scenario: Pulls a model and retrieves its details, asserting the model file contains the + * model name. + */ + @Test + @Order(4) + void shouldGetModelDetails() throws OllamaBaseException { + api.pullModel(EMBEDDING_MODEL); + ModelDetail modelDetails = api.getModelDetails(EMBEDDING_MODEL); + assertNotNull(modelDetails); + assertTrue(modelDetails.getModelFile().contains(EMBEDDING_MODEL)); + } + + /** + * Tests generating embeddings for a batch of input texts. + * + *

Scenario: Uses the embedding model to generate vector embeddings for two input sentences. + */ + @Test + @Order(5) + void shouldReturnEmbeddings() throws Exception { + api.pullModel(EMBEDDING_MODEL); + OllamaEmbedRequestModel m = new OllamaEmbedRequestModel(); + m.setModel(EMBEDDING_MODEL); + m.setInput(Arrays.asList("Why is the sky blue?", "Why is the grass green?")); + OllamaEmbedResponseModel embeddings = api.embed(m); + assertNotNull(embeddings, "Embeddings should not be null"); + assertFalse(embeddings.getEmbeddings().isEmpty(), "Embeddings should not be empty"); + } + + /** + * Tests generating structured output using the 'format' parameter. + * + *

Scenario: Calls generateWithFormat with a prompt and a JSON schema, expecting a structured + * response. Usage: generate with format, no thinking, no streaming. + */ + @Test + @Order(6) + void shouldGenerateWithStructuredOutput() throws OllamaBaseException { + api.pullModel(TOOLS_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."; + + Map format = new HashMap<>(); + format.put("type", "object"); + format.put( + "properties", + new HashMap() { + { + put( + "isNoon", + new HashMap() { + { + put("type", "boolean"); + } + }); + } + }); + format.put("required", List.of("isNoon")); + + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(TOOLS_MODEL) + .withPrompt(prompt) + .withFormat(format) + .build(); + OllamaGenerateStreamObserver handler = null; + OllamaResult result = api.generate(request, handler); + + assertNotNull(result); + assertNotNull(result.getResponse()); + assertFalse(result.getResponse().isEmpty()); + assertNotNull(result.getStructuredResponse().get("isNoon")); + } + + /** + * Tests basic text generation with default options. + * + *

Scenario: Calls generate with a general-purpose model, no thinking, no streaming, no + * format. Usage: generate, raw=false, think=false, no streaming. + */ + @Test + @Order(6) + void shouldGenerateWithDefaultOptions() throws OllamaBaseException { + api.pullModel(GENERAL_PURPOSE_MODEL); + boolean raw = false; + boolean thinking = false; + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(GENERAL_PURPOSE_MODEL) + .withPrompt( + "What is the capital of France? And what's France's connection with" + + " Mona Lisa?") + .withRaw(raw) + .withThink(thinking) + .withOptions(new OptionsBuilder().build()) + .build(); + OllamaGenerateStreamObserver handler = null; + OllamaResult result = api.generate(request, handler); + assertNotNull(result); + assertNotNull(result.getResponse()); + assertFalse(result.getResponse().isEmpty()); + } + + /** + * Tests text generation with streaming enabled. + * + *

Scenario: Calls generate with a general-purpose model, streaming the response tokens. + * Usage: generate, raw=false, think=false, streaming enabled. + */ + @Test + @Order(7) + void shouldGenerateWithDefaultOptionsStreamed() throws OllamaBaseException { + api.pullModel(GENERAL_PURPOSE_MODEL); + boolean raw = false; + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(GENERAL_PURPOSE_MODEL) + .withPrompt( + "What is the capital of France? And what's France's connection with" + + " Mona Lisa?") + .withRaw(raw) + .withThink(false) + .withOptions(new OptionsBuilder().build()) + .build(); + OllamaGenerateStreamObserver handler = null; + OllamaResult result = + api.generate( + request, + new OllamaGenerateStreamObserver( + null, new ConsoleOutputGenerateTokenHandler())); + assertNotNull(result); + assertNotNull(result.getResponse()); + assertFalse(result.getResponse().isEmpty()); + } + + /** + * Tests chat API with custom options (e.g., temperature). + * + *

Scenario: Builds a chat request with system and user messages, sets a custom temperature, + * and verifies the response. Usage: chat, no tools, no thinking, no streaming, custom options. + */ + @Test + @Order(8) + void shouldGenerateWithCustomOptions() throws OllamaBaseException { + api.pullModel(GENERAL_PURPOSE_MODEL); + + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(GENERAL_PURPOSE_MODEL); + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.SYSTEM, + "You are a helpful assistant who can generate random person's first" + + " and last names in the format [First name, Last name].") + .build(); + requestModel = + builder.withMessages(requestModel.getMessages()) + .withMessage(OllamaChatMessageRole.USER, "Give me a cool name") + .withOptions(new OptionsBuilder().setTemperature(0.5f).build()) + .build(); + OllamaChatResult chatResult = api.chat(requestModel, null); + + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + assertFalse(chatResult.getResponseModel().getMessage().getResponse().isEmpty()); + } + + /** + * Tests chat API with a system prompt and verifies the assistant's response. + * + *

Scenario: Sends a system prompt instructing the assistant to reply with a specific word, + * then checks the response. Usage: chat, no tools, no thinking, no streaming, system prompt. + */ + @Test + @Order(9) + void shouldChatWithSystemPrompt() throws OllamaBaseException { + api.pullModel(GENERAL_PURPOSE_MODEL); + + String expectedResponse = "Bhai"; + + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(GENERAL_PURPOSE_MODEL); + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.SYSTEM, + String.format( + "[INSTRUCTION-START] You are an obidient and helpful bot" + + " named %s. You always answer with only one word and" + + " that word is your name. [INSTRUCTION-END]", + expectedResponse)) + .withMessage(OllamaChatMessageRole.USER, "Who are you?") + .withOptions(new OptionsBuilder().setTemperature(0.0f).build()) + .build(); + + OllamaChatResult chatResult = api.chat(requestModel, null); + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + assertNotNull(chatResult.getResponseModel().getMessage()); + assertFalse(chatResult.getResponseModel().getMessage().getResponse().isBlank()); + assertTrue( + chatResult + .getResponseModel() + .getMessage() + .getResponse() + .contains(expectedResponse)); + assertEquals(3, chatResult.getChatHistory().size()); + } + + /** + * Tests chat API with multi-turn conversation (chat history). + * + *

Scenario: Sends a sequence of user messages, each time including the chat history, and + * verifies the assistant's responses. Usage: chat, no tools, no thinking, no streaming, + * multi-turn. + */ + @Test + @Order(10) + void shouldChatWithHistory() throws Exception { + api.pullModel(THINKING_TOOL_MODEL); + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(THINKING_TOOL_MODEL); + + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, "What is 1+1? Answer only in numbers.") + .build(); + + OllamaChatResult chatResult = api.chat(requestModel, null); + + assertNotNull(chatResult); + assertNotNull(chatResult.getChatHistory()); + assertNotNull(chatResult.getChatHistory().stream()); + + requestModel = + builder.withMessages(chatResult.getChatHistory()) + .withMessage(OllamaChatMessageRole.USER, "And what is its squared value?") + .build(); + + chatResult = api.chat(requestModel, null); + + assertNotNull(chatResult); + assertNotNull(chatResult.getChatHistory()); + assertNotNull(chatResult.getChatHistory().stream()); + + requestModel = + builder.withMessages(chatResult.getChatHistory()) + .withMessage( + OllamaChatMessageRole.USER, + "What is the largest value between 2, 4 and 6?") + .build(); + + chatResult = api.chat(requestModel, null); + + assertNotNull(chatResult, "Chat result should not be null"); + assertTrue( + chatResult.getChatHistory().size() > 2, + "Chat history should contain more than two messages"); + } + + /** + * Tests chat API with explicit tool invocation (client does not handle tools). + * + *

Scenario: Registers a tool, sends a user message that triggers a tool call, and verifies + * the tool call and arguments. Usage: chat, explicit tool, useTools=false, no thinking, no + * streaming. + */ + @Test + @Order(11) + void shouldChatWithExplicitTool() throws OllamaBaseException { + String theToolModel = TOOLS_MODEL; + api.pullModel(theToolModel); + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(theToolModel); + + api.registerTool(EmployeeFinderToolSpec.getSpecification()); + + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "Give me the ID and address of the employee Rahul Kumar.") + .build(); + requestModel.setOptions(new OptionsBuilder().setTemperature(0.9f).build().getOptionsMap()); + requestModel.setUseTools(true); + OllamaChatResult chatResult = api.chat(requestModel, null); + + assertNotNull(chatResult, "chatResult should not be null"); + assertNotNull(chatResult.getResponseModel(), "Response model should not be null"); + assertNotNull( + chatResult.getResponseModel().getMessage(), "Response message should not be null"); + assertEquals( + OllamaChatMessageRole.ASSISTANT.getRoleName(), + chatResult.getResponseModel().getMessage().getRole().getRoleName(), + "Role of the response message should be ASSISTANT"); + List toolCalls = chatResult.getChatHistory().get(1).getToolCalls(); + assert (!toolCalls.isEmpty()); + OllamaToolCallsFunction function = toolCalls.get(0).getFunction(); + assertEquals( + "get-employee-details", + function.getName(), + "Tool function name should be 'get-employee-details'"); + assertFalse( + function.getArguments().isEmpty(), "Tool function arguments should not be empty"); + Object employeeName = function.getArguments().get("employee-name"); + assertNotNull(employeeName, "Employee name argument should not be null"); + assertEquals("Rahul Kumar", employeeName, "Employee name argument should be 'Rahul Kumar'"); + assertTrue( + chatResult.getChatHistory().size() > 2, + "Chat history should have more than 2 messages"); + List finalToolCalls = + chatResult.getResponseModel().getMessage().getToolCalls(); + assertNull(finalToolCalls, "Final tool calls in the response message should be null"); + } + + /** + * Tests chat API with explicit tool invocation and useTools=true. + * + *

Scenario: Registers a tool, enables useTools, sends a user message, and verifies the + * assistant's tool call. Usage: chat, explicit tool, useTools=true, no thinking, no streaming. + */ + @Test + @Order(13) + void shouldChatWithExplicitToolAndUseTools() throws OllamaBaseException { + String theToolModel = TOOLS_MODEL; + api.pullModel(theToolModel); + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(theToolModel); + + api.registerTool(EmployeeFinderToolSpec.getSpecification()); + + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "Give me the ID and address of the employee Rahul Kumar.") + .build(); + requestModel.setOptions(new OptionsBuilder().setTemperature(0.9f).build().getOptionsMap()); + requestModel.setUseTools(true); + OllamaChatResult chatResult = api.chat(requestModel, null); + + assertNotNull(chatResult, "chatResult should not be null"); + assertNotNull(chatResult.getResponseModel(), "Response model should not be null"); + assertNotNull( + chatResult.getResponseModel().getMessage(), "Response message should not be null"); + assertEquals( + OllamaChatMessageRole.ASSISTANT.getRoleName(), + chatResult.getResponseModel().getMessage().getRole().getRoleName(), + "Role of the response message should be ASSISTANT"); + + boolean toolCalled = false; + List msgs = chatResult.getChatHistory(); + for (OllamaChatMessage msg : msgs) { + if (msg.getRole().equals(OllamaChatMessageRole.TOOL)) { + toolCalled = true; + } + } + assertTrue(toolCalled, "Assistant message should contain tool calls when useTools is true"); + } + + /** + * Tests chat API with explicit tool invocation and streaming enabled. + * + *

Scenario: Registers a tool, sends a user message, and streams the assistant's response + * (with tool call). Usage: chat, explicit tool, useTools=false, streaming enabled. + */ + @Test + @Order(14) + void shouldChatWithToolsAndStream() throws OllamaBaseException { + String theToolModel = TOOLS_MODEL; + api.pullModel(theToolModel); + + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(theToolModel); + + api.registerTool(EmployeeFinderToolSpec.getSpecification()); + + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "Give me the ID and address of employee Rahul Kumar") + .withKeepAlive("0m") + .withOptions(new OptionsBuilder().setTemperature(0.9f).build()) + .build(); + requestModel.setUseTools(true); + OllamaChatResult chatResult = api.chat(requestModel, new ConsoleOutputChatTokenHandler()); + + assertNotNull(chatResult, "chatResult should not be null"); + assertNotNull(chatResult.getResponseModel(), "Response model should not be null"); + assertNotNull( + chatResult.getResponseModel().getMessage(), "Response message should not be null"); + assertEquals( + OllamaChatMessageRole.ASSISTANT.getRoleName(), + chatResult.getResponseModel().getMessage().getRole().getRoleName(), + "Role of the response message should be ASSISTANT"); + List toolCalls = chatResult.getChatHistory().get(1).getToolCalls(); + assertEquals( + 1, + toolCalls.size(), + "There should be exactly one tool call in the second chat history message"); + OllamaToolCallsFunction function = toolCalls.get(0).getFunction(); + assertEquals( + "get-employee-details", + function.getName(), + "Tool function name should be 'get-employee-details'"); + assertFalse( + function.getArguments().isEmpty(), "Tool function arguments should not be empty"); + assertTrue( + chatResult.getChatHistory().size() > 2, + "Chat history should have more than 2 messages"); + List finalToolCalls = + chatResult.getResponseModel().getMessage().getToolCalls(); + assertNull(finalToolCalls, "Final tool calls in the response message should be null"); + } + + /** + * Tests chat API with an annotated tool (single parameter). + * + *

Scenario: Registers annotated tools, sends a user message that triggers a tool call, and + * verifies the tool call and arguments. Usage: chat, annotated tool, no thinking, no streaming. + */ + @Test + @Order(12) + void shouldChatWithAnnotatedToolSingleParam() throws OllamaBaseException { + String theToolModel = TOOLS_MODEL; + api.pullModel(theToolModel); + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(theToolModel); + + api.registerAnnotatedTools(); + + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "Compute the most important constant in the world using 5 digits") + .build(); + requestModel.setUseTools(true); + OllamaChatResult chatResult = api.chat(requestModel, null); + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + assertNotNull(chatResult.getResponseModel().getMessage()); + assertEquals( + OllamaChatMessageRole.ASSISTANT.getRoleName(), + chatResult.getResponseModel().getMessage().getRole().getRoleName()); + List toolCalls = chatResult.getChatHistory().get(1).getToolCalls(); + assert (!toolCalls.isEmpty()); + OllamaToolCallsFunction function = toolCalls.get(0).getFunction(); + assertEquals("computeImportantConstant", function.getName()); + assert (!function.getArguments().isEmpty()); + Object noOfDigits = function.getArguments().get("noOfDigits"); + assertNotNull(noOfDigits); + assertEquals("5", noOfDigits.toString()); + assertTrue(chatResult.getChatHistory().size() > 2); + List finalToolCalls = + chatResult.getResponseModel().getMessage().getToolCalls(); + assertNull(finalToolCalls); + } + + /** + * Tests chat API with an annotated tool (multiple parameters). + * + *

Scenario: Registers annotated tools, sends a user message that may trigger a tool call + * with multiple arguments. Usage: chat, annotated tool, no thinking, no streaming, multiple + * parameters. + * + *

Note: This test is non-deterministic due to model variability; some assertions are + * commented out. + */ + @Test + @Order(13) + void shouldChatWithAnnotatedToolMultipleParams() throws OllamaBaseException { + String theToolModel = TOOLS_MODEL; + api.pullModel(theToolModel); + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(theToolModel); + + api.registerAnnotatedTools(new AnnotatedTool()); + + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "Greet Rahul with a lot of hearts and respond to me with count of" + + " emojis that have been in used in the greeting") + .build(); + + OllamaChatResult chatResult = api.chat(requestModel, null); + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + assertNotNull(chatResult.getResponseModel().getMessage()); + assertEquals( + OllamaChatMessageRole.ASSISTANT.getRoleName(), + chatResult.getResponseModel().getMessage().getRole().getRoleName()); + } + + /** + * Tests chat API with streaming enabled (no tools, no thinking). + * + *

Scenario: Sends a user message and streams the assistant's response. Usage: chat, no + * tools, no thinking, streaming enabled. + */ + @Test + @Order(15) + void shouldChatWithStream() throws OllamaBaseException { + api.deregisterTools(); + api.pullModel(GENERAL_PURPOSE_MODEL); + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(GENERAL_PURPOSE_MODEL); + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "What is the capital of France? And what's France's connection with" + + " Mona Lisa?") + .build(); + requestModel.setThink(false); + + OllamaChatResult chatResult = api.chat(requestModel, new ConsoleOutputChatTokenHandler()); + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + assertNotNull(chatResult.getResponseModel().getMessage()); + assertNotNull(chatResult.getResponseModel().getMessage().getResponse()); + } + + /** + * Tests chat API with thinking and streaming enabled. + * + *

Scenario: Sends a user message with thinking enabled and streams the assistant's response. + * Usage: chat, no tools, thinking enabled, streaming enabled. + */ + @Test + @Order(15) + void shouldChatWithThinkingAndStream() throws OllamaBaseException { + api.pullModel(THINKING_TOOL_MODEL_2); + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(THINKING_TOOL_MODEL_2); + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "What is the capital of France? And what's France's connection with" + + " Mona Lisa?") + .withThinking(true) + .withKeepAlive("0m") + .build(); + + OllamaChatResult chatResult = api.chat(requestModel, new ConsoleOutputChatTokenHandler()); + + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + assertNotNull(chatResult.getResponseModel().getMessage()); + assertNotNull(chatResult.getResponseModel().getMessage().getResponse()); + } + + /** + * Tests chat API with an image input from a URL. + * + *

Scenario: Sends a user message with an image URL and verifies the assistant's response. + * Usage: chat, vision model, image from URL, no tools, no thinking, no streaming. + */ + @Test + @Order(10) + void shouldChatWithImageFromURL() + throws OllamaBaseException, IOException, InterruptedException { + api.pullModel(VISION_MODEL); + + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(VISION_MODEL); + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "What's in the picture?", + Collections.emptyList(), + "https://t3.ftcdn.net/jpg/02/96/63/80/360_F_296638053_0gUVA4WVBKceGsIr7LNqRWSnkusi07dq.jpg") + .build(); + api.registerAnnotatedTools(new OllamaAPIIntegrationTest()); + + OllamaChatResult chatResult = api.chat(requestModel, null); + assertNotNull(chatResult); + } + + /** + * Tests chat API with an image input from a file and multi-turn history. + * + *

Scenario: Sends a user message with an image file, then continues the conversation with + * chat history. Usage: chat, vision model, image from file, multi-turn, no tools, no thinking, + * no streaming. + */ + @Test + @Order(10) + void shouldChatWithImageFromFileAndHistory() throws OllamaBaseException { + api.pullModel(VISION_MODEL); + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(VISION_MODEL); + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "What's in the picture?", + Collections.emptyList(), + List.of(getImageFileFromClasspath("emoji-smile.jpeg"))) + .build(); + + OllamaChatResult chatResult = api.chat(requestModel, null); + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + builder.reset(); + + requestModel = + builder.withMessages(chatResult.getChatHistory()) + .withMessage(OllamaChatMessageRole.USER, "What's the color?") + .build(); + + chatResult = api.chat(requestModel, null); + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + } + // /** - // * Initializes the OllamaAPI instance for integration tests. + // * Tests generateWithImages using an image URL as input. // * - // *

This method sets up the OllamaAPI client, either using an external Ollama host (if - // * environment variables are set) or by starting a Testcontainers-based Ollama instance. - // It also - // * configures request timeout and model pull retry settings. - // */ - // @BeforeAll - // static void setUp() { - // // ... (no javadoc needed for private setup logic) - // int requestTimeoutSeconds = 60; - // int numberOfRetriesForModelPull = 5; - // - // try { - // String useExternalOllamaHostEnv = System.getenv("USE_EXTERNAL_OLLAMA_HOST"); - // String ollamaHostEnv = System.getenv("OLLAMA_HOST"); - // - // boolean useExternalOllamaHost; - // String ollamaHost; - // - // if (useExternalOllamaHostEnv == null && ollamaHostEnv == null) { - // Properties props = new Properties(); - // try { - // props.load( - // OllamaAPIIntegrationTest.class - // .getClassLoader() - // .getResourceAsStream("test-config.properties")); - // } catch (Exception e) { - // throw new RuntimeException( - // "Could not load test-config.properties from classpath", e); - // } - // useExternalOllamaHost = - // Boolean.parseBoolean( - // props.getProperty("USE_EXTERNAL_OLLAMA_HOST", "false")); - // ollamaHost = props.getProperty("OLLAMA_HOST"); - // requestTimeoutSeconds = - // Integer.parseInt(props.getProperty("REQUEST_TIMEOUT_SECONDS")); - // numberOfRetriesForModelPull = - // Integer.parseInt(props.getProperty("NUMBER_RETRIES_FOR_MODEL_PULL")); - // } else { - // useExternalOllamaHost = Boolean.parseBoolean(useExternalOllamaHostEnv); - // ollamaHost = ollamaHostEnv; - // } - // - // if (useExternalOllamaHost) { - // LOG.info("Using external Ollama host: {}", ollamaHost); - // api = new OllamaAPI(ollamaHost); - // } else { - // throw new RuntimeException( - // "USE_EXTERNAL_OLLAMA_HOST is not set so, we will be using - // Testcontainers" - // + " Ollama host for the tests now. If you would like to use an - // external" - // + " host, please set the env var to USE_EXTERNAL_OLLAMA_HOST=true - // and" - // + " set the env var OLLAMA_HOST=http://localhost:11435 or a - // different" - // + " host/port."); - // } - // } catch (Exception e) { - // String ollamaVersion = "0.6.1"; - // int internalPort = 11434; - // int mappedPort = 11435; - // ollama = new OllamaContainer("ollama/ollama:" + ollamaVersion); - // ollama.addExposedPort(internalPort); - // List portBindings = new ArrayList<>(); - // portBindings.add(mappedPort + ":" + internalPort); - // ollama.setPortBindings(portBindings); - // ollama.start(); - // LOG.info("Using Testcontainer Ollama host..."); - // api = - // new OllamaAPI( - // "http://" - // + ollama.getHost() - // + ":" - // + ollama.getMappedPort(internalPort)); - // } - // api.setRequestTimeoutSeconds(requestTimeoutSeconds); - // api.setNumberOfRetriesForModelPull(numberOfRetriesForModelPull); - // } - // - // /** - // * Verifies that a ConnectException is thrown when attempting to connect to a non-existent - // * Ollama endpoint. - // * - // *

Scenario: Ensures the API client fails gracefully when the Ollama server is - // unreachable. + // *

Scenario: Calls generateWithImages with a vision model and an image URL,expecting a + // * non-empty response. Usage: generateWithImages, image from URL, no streaming. // */ // @Test - // @Order(1) - // void shouldThrowConnectExceptionForWrongEndpoint() { - // OllamaAPI ollamaAPI = new OllamaAPI("http://wrong-host:11434"); - // assertThrows(OllamaBaseException.class, ollamaAPI::listModels); - // } + // @Order(17) + // void shouldGenerateWithImageURLs() + // throws OllamaBaseException { + // api.pullModel(VISION_MODEL); // - // /** - // * Tests retrieval of the Ollama server version. - // * - // *

Scenario: Calls the /api/version endpoint and asserts a non-null version string is - // * returned. - // */ - // @Test - // @Order(1) - // void shouldReturnVersionFromVersionAPI() throws OllamaBaseException { - // String version = api.getVersion(); - // assertNotNull(version); - // } + // OllamaResult result = + // api.generateWithImages( + // VISION_MODEL, + // "What is in this image?", + // List.of( // - // /** - // * Tests the /api/ping endpoint for server liveness. - // * - // *

Scenario: Ensures the Ollama server responds to ping requests. - // */ - // @Test - // @Order(1) - // void shouldPingSuccessfully() throws OllamaBaseException { - // boolean pingResponse = api.ping(); - // assertTrue(pingResponse, "Ping should return true"); - // } - // - // /** - // * Tests listing all available models from the Ollama server. - // * - // *

Scenario: Calls /api/tags and verifies the returned list is not null (may be empty). - // */ - // @Test - // @Order(2) - // void shouldListModels() throws OllamaBaseException { - // List models = api.listModels(); - // assertNotNull(models, "Models should not be null"); - // assertTrue(models.size() >= 0, "Models list can be empty or contain elements"); - // } - // - // @Test - // @Order(2) - // void shouldUnloadModel() { - // final String model = GENERAL_PURPOSE_MODEL; - // assertDoesNotThrow( - // () -> api.unloadModel(model), "unloadModel should not throw any exception"); - // } - // - // /** - // * Tests pulling a model and verifying it appears in the model list. - // * - // *

Scenario: Pulls an embedding model, then checks that it is present in the list of - // models. - // */ - // @Test - // @Order(3) - // void shouldPullModelAndListModels() throws OllamaBaseException { - // api.pullModel(EMBEDDING_MODEL); - // List models = api.listModels(); - // assertNotNull(models, "Models should not be null"); - // assertFalse(models.isEmpty(), "Models list should contain elements"); - // } - // - // /** - // * Tests fetching detailed information for a specific model. - // * - // *

Scenario: Pulls a model and retrieves its details, asserting the model file contains - // the - // * model name. - // */ - // @Test - // @Order(4) - // void shouldGetModelDetails() throws OllamaBaseException { - // api.pullModel(EMBEDDING_MODEL); - // ModelDetail modelDetails = api.getModelDetails(EMBEDDING_MODEL); - // assertNotNull(modelDetails); - // assertTrue(modelDetails.getModelFile().contains(EMBEDDING_MODEL)); - // } - // - // /** - // * Tests generating embeddings for a batch of input texts. - // * - // *

Scenario: Uses the embedding model to generate vector embeddings for two input - // sentences. - // */ - // @Test - // @Order(5) - // void shouldReturnEmbeddings() throws Exception { - // api.pullModel(EMBEDDING_MODEL); - // OllamaEmbedRequestModel m = new OllamaEmbedRequestModel(); - // m.setModel(EMBEDDING_MODEL); - // m.setInput(Arrays.asList("Why is the sky blue?", "Why is the grass green?")); - // OllamaEmbedResponseModel embeddings = api.embed(m); - // assertNotNull(embeddings, "Embeddings should not be null"); - // assertFalse(embeddings.getEmbeddings().isEmpty(), "Embeddings should not be empty"); - // } - // - // /** - // * Tests generating structured output using the 'format' parameter. - // * - // *

Scenario: Calls generateWithFormat with a prompt and a JSON schema, expecting a - // structured - // * response. Usage: generate with format, no thinking, no streaming. - // */ - // @Test - // @Order(6) - // void shouldGenerateWithStructuredOutput() throws OllamaBaseException { - // api.pullModel(TOOLS_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."; - // - // Map format = new HashMap<>(); - // format.put("type", "object"); - // format.put( - // "properties", - // new HashMap() { - // { - // put( - // "isNoon", - // new HashMap() { - // { - // put("type", "boolean"); - // } - // }); - // } - // }); - // format.put("required", List.of("isNoon")); - // - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(TOOLS_MODEL) - // .withPrompt(prompt) - // .withFormat(format) - // .build(); - // OllamaGenerateStreamObserver handler = null; - // OllamaResult result = api.generate(request, handler); - // - // assertNotNull(result); - // assertNotNull(result.getResponse()); - // assertFalse(result.getResponse().isEmpty()); - // assertNotNull(result.getStructuredResponse().get("isNoon")); - // } - // - // /** - // * Tests basic text generation with default options. - // * - // *

Scenario: Calls generate with a general-purpose model, no thinking, no streaming, no - // * format. Usage: generate, raw=false, think=false, no streaming. - // */ - // @Test - // @Order(6) - // void shouldGenerateWithDefaultOptions() throws OllamaBaseException { - // api.pullModel(GENERAL_PURPOSE_MODEL); - // boolean raw = false; - // boolean thinking = false; - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(GENERAL_PURPOSE_MODEL) - // .withPrompt( - // "What is the capital of France? And what's France's connection - // with" - // + " Mona Lisa?") - // .withRaw(raw) - // .withThink(thinking) - // .withOptions(new OptionsBuilder().build()) - // .build(); - // OllamaGenerateStreamObserver handler = null; - // OllamaResult result = api.generate(request, handler); + // "https://i.pinimg.com/736x/f9/4e/cb/f94ecba040696a3a20b484d2e15159ec.jpg"), + // new OptionsBuilder().build(), + // null, + // null); // assertNotNull(result); // assertNotNull(result.getResponse()); // assertFalse(result.getResponse().isEmpty()); // } - // + + /** + * Tests generateWithImages using an image file as input. + * + *

Scenario: Calls generateWithImages with a vision model and an image file, expecting a + * non-empty response. Usage: generateWithImages, image from file, no streaming. + */ + @Test + @Order(18) + void shouldGenerateWithImageFiles() throws OllamaBaseException { + api.pullModel(VISION_MODEL); + try { + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(VISION_MODEL) + .withPrompt("What is in this image?") + .withRaw(false) + .withThink(false) + .withOptions(new OptionsBuilder().build()) + .withImages(List.of(getImageFileFromClasspath("roses.jpg"))) + .withFormat(null) + .withKeepAlive("0m") + .build(); + OllamaGenerateStreamObserver handler = null; + OllamaResult result = api.generate(request, handler); + assertNotNull(result); + assertNotNull(result.getResponse()); + assertFalse(result.getResponse().isEmpty()); + } catch (OllamaBaseException e) { + fail(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * Tests generateWithImages with image file input and streaming enabled. + * + *

Scenario: Calls generateWithImages with a vision model, an image file, and a streaming + * handler for the response. Usage: generateWithImages, image from file, streaming enabled. + */ + @Test + @Order(20) + void shouldGenerateWithImageFilesAndResponseStreamed() throws OllamaBaseException, IOException { + api.pullModel(VISION_MODEL); + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(VISION_MODEL) + .withPrompt("What is in this image?") + .withRaw(false) + .withThink(false) + .withOptions(new OptionsBuilder().build()) + .withImages(List.of(getImageFileFromClasspath("roses.jpg"))) + .withFormat(null) + .withKeepAlive("0m") + .build(); + OllamaGenerateStreamObserver handler = + new OllamaGenerateStreamObserver( + new ConsoleOutputGenerateTokenHandler(), + new ConsoleOutputGenerateTokenHandler()); + OllamaResult result = api.generate(request, handler); + assertNotNull(result); + assertNotNull(result.getResponse()); + assertFalse(result.getResponse().isEmpty()); + } + + /** + * Tests generate with thinking enabled (no streaming). + * + *

Scenario: Calls generate with think=true, expecting both response and thinking fields to + * be populated. Usage: generate, think=true, no streaming. + */ + @Test + @Order(20) + void shouldGenerateWithThinking() throws OllamaBaseException { + api.pullModel(THINKING_TOOL_MODEL); + + boolean raw = false; + boolean think = true; + + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(THINKING_TOOL_MODEL) + .withPrompt("Who are you?") + .withRaw(raw) + .withThink(think) + .withOptions(new OptionsBuilder().build()) + .withFormat(null) + .withKeepAlive("0m") + .build(); + OllamaGenerateStreamObserver handler = new OllamaGenerateStreamObserver(null, null); + + OllamaResult result = api.generate(request, handler); + assertNotNull(result); + assertNotNull(result.getResponse()); + assertNotNull(result.getThinking()); + } + + /** + * Tests generate with thinking and streaming enabled. + * + *

Scenario: Calls generate with think=true and a stream handler for both thinking and + * response tokens. Usage: generate, think=true, streaming enabled. + */ + @Test + @Order(20) + void shouldGenerateWithThinkingAndStreamHandler() throws OllamaBaseException { + api.pullModel(THINKING_TOOL_MODEL); + boolean raw = false; + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(THINKING_TOOL_MODEL) + .withPrompt("Who are you?") + .withRaw(raw) + .withThink(true) + .withOptions(new OptionsBuilder().build()) + .withFormat(null) + .withKeepAlive("0m") + .build(); + OllamaGenerateStreamObserver handler = + new OllamaGenerateStreamObserver( + thinkingToken -> { + LOG.info(thinkingToken.toUpperCase()); + }, + resToken -> { + LOG.info(resToken.toLowerCase()); + }); + + OllamaResult result = api.generate(request, handler); + assertNotNull(result); + assertNotNull(result.getResponse()); + assertNotNull(result.getThinking()); + } + + /** + * Tests generate with raw=true parameter. + * + *

Scenario: Calls generate with raw=true, which sends the prompt as-is without any + * formatting. Usage: generate, raw=true, no thinking, no streaming. + */ + @Test + @Order(21) + void shouldGenerateWithRawMode() throws OllamaBaseException { + api.pullModel(GENERAL_PURPOSE_MODEL); + api.unloadModel(GENERAL_PURPOSE_MODEL); + boolean raw = true; + boolean thinking = false; + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(GENERAL_PURPOSE_MODEL) + .withPrompt("What is 2+2?") + .withRaw(raw) + .withThink(thinking) + .withOptions(new OptionsBuilder().build()) + .withFormat(null) + .withKeepAlive("0m") + .build(); + OllamaGenerateStreamObserver handler = new OllamaGenerateStreamObserver(null, null); + OllamaResult result = api.generate(request, handler); + assertNotNull(result); + assertNotNull(result.getResponse()); + assertFalse(result.getResponse().isEmpty()); + } + + /** + * Tests generate with raw=true and streaming enabled. + * + *

Scenario: Calls generate with raw=true and streams the response. Usage: generate, + * raw=true, no thinking, streaming enabled. + */ + @Test + @Order(22) + void shouldGenerateWithRawModeAndStreaming() throws OllamaBaseException { + api.pullModel(GENERAL_PURPOSE_MODEL); + boolean raw = true; + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(GENERAL_PURPOSE_MODEL) + .withPrompt("What is the largest planet in our solar system?") + .withRaw(raw) + .withThink(false) + .withOptions(new OptionsBuilder().build()) + .withFormat(null) + .withKeepAlive("0m") + .build(); + OllamaGenerateStreamObserver handler = + new OllamaGenerateStreamObserver(null, new ConsoleOutputGenerateTokenHandler()); + OllamaResult result = api.generate(request, handler); + + assertNotNull(result); + assertNotNull(result.getResponse()); + assertFalse(result.getResponse().isEmpty()); + } + // /** - // * Tests text generation with streaming enabled. + // * Tests generate with raw=true and thinking enabled. // * - // *

Scenario: Calls generate with a general-purpose model, streaming the response - // tokens. - // * Usage: generate, raw=false, think=false, streaming enabled. + // *

Scenario: Calls generate with raw=true and think=true combination. Usage: generate, + // * raw=true, thinking enabled, no streaming. // */ // @Test - // @Order(7) - // void shouldGenerateWithDefaultOptionsStreamed() throws OllamaBaseException { - // api.pullModel(GENERAL_PURPOSE_MODEL); - // boolean raw = false; - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(GENERAL_PURPOSE_MODEL) - // .withPrompt( - // "What is the capital of France? And what's France's connection - // with" - // + " Mona Lisa?") - // .withRaw(raw) - // .withThink(false) - // .withOptions(new OptionsBuilder().build()) - // .build(); - // OllamaGenerateStreamObserver handler = null; + // @Order(23) + // void shouldGenerateWithRawModeAndThinking() + // throws OllamaBaseException + // { + // api.pullModel(THINKING_TOOL_MODEL_2); + // api.unloadModel(THINKING_TOOL_MODEL_2); + // boolean raw = + // true; // if true no formatting will be applied to the prompt. You may choose + // to use + // // the raw parameter if you are specifying a full templated prompt in your + // // request to the API + // boolean thinking = true; // OllamaResult result = // api.generate( - // request, - // new OllamaGenerateStreamObserver( - // null, new ConsoleOutputGenerateTokenHandler())); - // assertNotNull(result); - // assertNotNull(result.getResponse()); - // assertFalse(result.getResponse().isEmpty()); - // } - // - // /** - // * Tests chat API with custom options (e.g., temperature). - // * - // *

Scenario: Builds a chat request with system and user messages, sets a custom - // temperature, - // * and verifies the response. Usage: chat, no tools, no thinking, no streaming, custom - // options. - // */ - // @Test - // @Order(8) - // void shouldGenerateWithCustomOptions() throws OllamaBaseException { - // api.pullModel(GENERAL_PURPOSE_MODEL); - // - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(GENERAL_PURPOSE_MODEL); - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.SYSTEM, - // "You are a helpful assistant who can generate random person's - // first" - // + " and last names in the format [First name, Last - // name].") - // .build(); - // requestModel = - // builder.withMessages(requestModel.getMessages()) - // .withMessage(OllamaChatMessageRole.USER, "Give me a cool name") - // .withOptions(new OptionsBuilder().setTemperature(0.5f).build()) - // .build(); - // OllamaChatResult chatResult = api.chat(requestModel, null); - // - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // assertFalse(chatResult.getResponseModel().getMessage().getResponse().isEmpty()); - // } - // - // /** - // * Tests chat API with a system prompt and verifies the assistant's response. - // * - // *

Scenario: Sends a system prompt instructing the assistant to reply with a specific - // word, - // * then checks the response. Usage: chat, no tools, no thinking, no streaming, system - // prompt. - // */ - // @Test - // @Order(9) - // void shouldChatWithSystemPrompt() throws OllamaBaseException { - // api.pullModel(GENERAL_PURPOSE_MODEL); - // - // String expectedResponse = "Bhai"; - // - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(GENERAL_PURPOSE_MODEL); - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.SYSTEM, - // String.format( - // "[INSTRUCTION-START] You are an obidient and helpful - // bot" - // + " named %s. You always answer with only one word - // and" - // + " that word is your name. [INSTRUCTION-END]", - // expectedResponse)) - // .withMessage(OllamaChatMessageRole.USER, "Who are you?") - // .withOptions(new OptionsBuilder().setTemperature(0.0f).build()) - // .build(); - // - // OllamaChatResult chatResult = api.chat(requestModel, null); - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // assertNotNull(chatResult.getResponseModel().getMessage()); - // assertFalse(chatResult.getResponseModel().getMessage().getResponse().isBlank()); - // assertTrue( - // chatResult - // .getResponseModel() - // .getMessage() - // .getResponse() - // .contains(expectedResponse)); - // assertEquals(3, chatResult.getChatHistory().size()); - // } - // - // /** - // * Tests chat API with multi-turn conversation (chat history). - // * - // *

Scenario: Sends a sequence of user messages, each time including the chat history, - // and - // * verifies the assistant's responses. Usage: chat, no tools, no thinking, no streaming, - // * multi-turn. - // */ - // @Test - // @Order(10) - // void shouldChatWithHistory() throws Exception { - // api.pullModel(THINKING_TOOL_MODEL); - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(THINKING_TOOL_MODEL); - // - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, "What is 1+1? Answer only in - // numbers.") - // .build(); - // - // OllamaChatResult chatResult = api.chat(requestModel, null); - // - // assertNotNull(chatResult); - // assertNotNull(chatResult.getChatHistory()); - // assertNotNull(chatResult.getChatHistory().stream()); - // - // requestModel = - // builder.withMessages(chatResult.getChatHistory()) - // .withMessage(OllamaChatMessageRole.USER, "And what is its squared - // value?") - // .build(); - // - // chatResult = api.chat(requestModel, null); - // - // assertNotNull(chatResult); - // assertNotNull(chatResult.getChatHistory()); - // assertNotNull(chatResult.getChatHistory().stream()); - // - // requestModel = - // builder.withMessages(chatResult.getChatHistory()) - // .withMessage( - // OllamaChatMessageRole.USER, - // "What is the largest value between 2, 4 and 6?") - // .build(); - // - // chatResult = api.chat(requestModel, null); - // - // assertNotNull(chatResult, "Chat result should not be null"); - // assertTrue( - // chatResult.getChatHistory().size() > 2, - // "Chat history should contain more than two messages"); - // } - // - // /** - // * Tests chat API with explicit tool invocation (client does not handle tools). - // * - // *

Scenario: Registers a tool, sends a user message that triggers a tool call, and - // verifies - // * the tool call and arguments. Usage: chat, explicit tool, useTools=false, no thinking, - // no - // * streaming. - // */ - // @Test - // @Order(11) - // void shouldChatWithExplicitTool() throws OllamaBaseException { - // String theToolModel = TOOLS_MODEL; - // api.pullModel(theToolModel); - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(theToolModel); - // - // api.registerTool(employeeFinderTool()); - // - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "Give me the ID and address of the employee Rahul Kumar.") - // .build(); - // requestModel.setOptions(new - // OptionsBuilder().setTemperature(0.9f).build().getOptionsMap()); - // requestModel.setUseTools(true); - // OllamaChatResult chatResult = api.chat(requestModel, null); - // - // assertNotNull(chatResult, "chatResult should not be null"); - // assertNotNull(chatResult.getResponseModel(), "Response model should not be null"); - // assertNotNull( - // chatResult.getResponseModel().getMessage(), "Response message should not be - // null"); - // assertEquals( - // OllamaChatMessageRole.ASSISTANT.getRoleName(), - // chatResult.getResponseModel().getMessage().getRole().getRoleName(), - // "Role of the response message should be ASSISTANT"); - // List toolCalls = - // chatResult.getChatHistory().get(1).getToolCalls(); - // assert (!toolCalls.isEmpty()); - // OllamaToolCallsFunction function = toolCalls.get(0).getFunction(); - // assertEquals( - // "get-employee-details", - // function.getName(), - // "Tool function name should be 'get-employee-details'"); - // assertFalse( - // function.getArguments().isEmpty(), "Tool function arguments should not be - // empty"); - // Object employeeName = function.getArguments().get("employee-name"); - // assertNotNull(employeeName, "Employee name argument should not be null"); - // assertEquals("Rahul Kumar", employeeName, "Employee name argument should be 'Rahul - // Kumar'"); - // assertTrue( - // chatResult.getChatHistory().size() > 2, - // "Chat history should have more than 2 messages"); - // List finalToolCalls = - // chatResult.getResponseModel().getMessage().getToolCalls(); - // assertNull(finalToolCalls, "Final tool calls in the response message should be null"); - // } - // - // /** - // * Tests chat API with explicit tool invocation and useTools=true. - // * - // *

Scenario: Registers a tool, enables useTools, sends a user message, and verifies the - // * assistant's tool call. Usage: chat, explicit tool, useTools=true, no thinking, no - // streaming. - // */ - // @Test - // @Order(13) - // void shouldChatWithExplicitToolAndUseTools() throws OllamaBaseException { - // String theToolModel = TOOLS_MODEL; - // api.pullModel(theToolModel); - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(theToolModel); - // - // api.registerTool(employeeFinderTool()); - // - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "Give me the ID and address of the employee Rahul Kumar.") - // .build(); - // requestModel.setOptions(new - // OptionsBuilder().setTemperature(0.9f).build().getOptionsMap()); - // requestModel.setUseTools(true); - // OllamaChatResult chatResult = api.chat(requestModel, null); - // - // assertNotNull(chatResult, "chatResult should not be null"); - // assertNotNull(chatResult.getResponseModel(), "Response model should not be null"); - // assertNotNull( - // chatResult.getResponseModel().getMessage(), "Response message should not be - // null"); - // assertEquals( - // OllamaChatMessageRole.ASSISTANT.getRoleName(), - // chatResult.getResponseModel().getMessage().getRole().getRoleName(), - // "Role of the response message should be ASSISTANT"); - // - // boolean toolCalled = false; - // List msgs = chatResult.getChatHistory(); - // for (OllamaChatMessage msg : msgs) { - // if (msg.getRole().equals(OllamaChatMessageRole.TOOL)) { - // toolCalled = true; - // } - // } - // assertTrue(toolCalled, "Assistant message should contain tool calls when useTools is - // true"); - // } - // - // /** - // * Tests chat API with explicit tool invocation and streaming enabled. - // * - // *

Scenario: Registers a tool, sends a user message, and streams the assistant's - // response - // * (with tool call). Usage: chat, explicit tool, useTools=false, streaming enabled. - // */ - // @Test - // @Order(14) - // void shouldChatWithToolsAndStream() throws OllamaBaseException { - // String theToolModel = TOOLS_MODEL; - // api.pullModel(theToolModel); - // - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(theToolModel); - // - // api.registerTool(employeeFinderTool()); - // - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "Give me the ID and address of employee Rahul Kumar") - // .withKeepAlive("0m") - // .withOptions(new OptionsBuilder().setTemperature(0.9f).build()) - // .build(); - // requestModel.setUseTools(true); - // OllamaChatResult chatResult = api.chat(requestModel, new - // ConsoleOutputChatTokenHandler()); - // - // assertNotNull(chatResult, "chatResult should not be null"); - // assertNotNull(chatResult.getResponseModel(), "Response model should not be null"); - // assertNotNull( - // chatResult.getResponseModel().getMessage(), "Response message should not be - // null"); - // assertEquals( - // OllamaChatMessageRole.ASSISTANT.getRoleName(), - // chatResult.getResponseModel().getMessage().getRole().getRoleName(), - // "Role of the response message should be ASSISTANT"); - // List toolCalls = - // chatResult.getChatHistory().get(1).getToolCalls(); - // assertEquals( - // 1, - // toolCalls.size(), - // "There should be exactly one tool call in the second chat history message"); - // OllamaToolCallsFunction function = toolCalls.get(0).getFunction(); - // assertEquals( - // "get-employee-details", - // function.getName(), - // "Tool function name should be 'get-employee-details'"); - // assertFalse( - // function.getArguments().isEmpty(), "Tool function arguments should not be - // empty"); - // assertTrue( - // chatResult.getChatHistory().size() > 2, - // "Chat history should have more than 2 messages"); - // List finalToolCalls = - // chatResult.getResponseModel().getMessage().getToolCalls(); - // assertNull(finalToolCalls, "Final tool calls in the response message should be null"); - // } - // - // /** - // * Tests chat API with an annotated tool (single parameter). - // * - // *

Scenario: Registers annotated tools, sends a user message that triggers a tool call, - // and - // * verifies the tool call and arguments. Usage: chat, annotated tool, no thinking, no - // streaming. - // */ - // @Test - // @Order(12) - // void shouldChatWithAnnotatedToolSingleParam() throws OllamaBaseException { - // String theToolModel = TOOLS_MODEL; - // api.pullModel(theToolModel); - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(theToolModel); - // - // api.registerAnnotatedTools(); - // - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "Compute the most important constant in the world using 5 - // digits") - // .build(); - // requestModel.setUseTools(true); - // OllamaChatResult chatResult = api.chat(requestModel, null); - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // assertNotNull(chatResult.getResponseModel().getMessage()); - // assertEquals( - // OllamaChatMessageRole.ASSISTANT.getRoleName(), - // chatResult.getResponseModel().getMessage().getRole().getRoleName()); - // List toolCalls = - // chatResult.getChatHistory().get(1).getToolCalls(); - // assert (!toolCalls.isEmpty()); - // OllamaToolCallsFunction function = toolCalls.get(0).getFunction(); - // assertEquals("computeImportantConstant", function.getName()); - // assert (!function.getArguments().isEmpty()); - // Object noOfDigits = function.getArguments().get("noOfDigits"); - // assertNotNull(noOfDigits); - // assertEquals("5", noOfDigits.toString()); - // assertTrue(chatResult.getChatHistory().size() > 2); - // List finalToolCalls = - // chatResult.getResponseModel().getMessage().getToolCalls(); - // assertNull(finalToolCalls); - // } - // - // /** - // * Tests chat API with an annotated tool (multiple parameters). - // * - // *

Scenario: Registers annotated tools, sends a user message that may trigger a tool - // call - // * with multiple arguments. Usage: chat, annotated tool, no thinking, no streaming, - // multiple - // * parameters. - // * - // *

Note: This test is non-deterministic due to model variability; some assertions are - // * commented out. - // */ - // @Test - // @Order(13) - // void shouldChatWithAnnotatedToolMultipleParams() throws OllamaBaseException { - // String theToolModel = TOOLS_MODEL; - // api.pullModel(theToolModel); - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(theToolModel); - // - // api.registerAnnotatedTools(new AnnotatedTool()); - // - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "Greet Rahul with a lot of hearts and respond to me with count - // of" - // + " emojis that have been in used in the greeting") - // .build(); - // - // OllamaChatResult chatResult = api.chat(requestModel, null); - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // assertNotNull(chatResult.getResponseModel().getMessage()); - // assertEquals( - // OllamaChatMessageRole.ASSISTANT.getRoleName(), - // chatResult.getResponseModel().getMessage().getRole().getRoleName()); - // } - // - // /** - // * Tests chat API with streaming enabled (no tools, no thinking). - // * - // *

Scenario: Sends a user message and streams the assistant's response. Usage: chat, no - // * tools, no thinking, streaming enabled. - // */ - // @Test - // @Order(15) - // void shouldChatWithStream() throws OllamaBaseException { - // api.deregisterTools(); - // api.pullModel(GENERAL_PURPOSE_MODEL); - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(GENERAL_PURPOSE_MODEL); - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "What is the capital of France? And what's France's connection - // with" - // + " Mona Lisa?") - // .build(); - // requestModel.setThink(false); - // - // OllamaChatResult chatResult = api.chat(requestModel, new - // ConsoleOutputChatTokenHandler()); - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // assertNotNull(chatResult.getResponseModel().getMessage()); - // assertNotNull(chatResult.getResponseModel().getMessage().getResponse()); - // } - // - // /** - // * Tests chat API with thinking and streaming enabled. - // * - // *

Scenario: Sends a user message with thinking enabled and streams the assistant's - // response. - // * Usage: chat, no tools, thinking enabled, streaming enabled. - // */ - // @Test - // @Order(15) - // void shouldChatWithThinkingAndStream() throws OllamaBaseException { - // api.pullModel(THINKING_TOOL_MODEL_2); - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(THINKING_TOOL_MODEL_2); - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "What is the capital of France? And what's France's connection - // with" - // + " Mona Lisa?") - // .withThinking(true) - // .withKeepAlive("0m") - // .build(); - // - // OllamaChatResult chatResult = api.chat(requestModel, new - // ConsoleOutputChatTokenHandler()); - // - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // assertNotNull(chatResult.getResponseModel().getMessage()); - // assertNotNull(chatResult.getResponseModel().getMessage().getResponse()); - // } - // - // /** - // * Tests chat API with an image input from a URL. - // * - // *

Scenario: Sends a user message with an image URL and verifies the assistant's - // response. - // * Usage: chat, vision model, image from URL, no tools, no thinking, no streaming. - // */ - // @Test - // @Order(10) - // void shouldChatWithImageFromURL() - // throws OllamaBaseException, IOException, InterruptedException { - // api.pullModel(VISION_MODEL); - // - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(VISION_MODEL); - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "What's in the picture?", - // Collections.emptyList(), - // - // "https://t3.ftcdn.net/jpg/02/96/63/80/360_F_296638053_0gUVA4WVBKceGsIr7LNqRWSnkusi07dq.jpg") - // .build(); - // api.registerAnnotatedTools(new OllamaAPIIntegrationTest()); - // - // OllamaChatResult chatResult = api.chat(requestModel, null); - // assertNotNull(chatResult); - // } - // - // /** - // * Tests chat API with an image input from a file and multi-turn history. - // * - // *

Scenario: Sends a user message with an image file, then continues the conversation - // with - // * chat history. Usage: chat, vision model, image from file, multi-turn, no tools, no - // thinking, - // * no streaming. - // */ - // @Test - // @Order(10) - // void shouldChatWithImageFromFileAndHistory() throws OllamaBaseException { - // api.pullModel(VISION_MODEL); - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(VISION_MODEL); - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "What's in the picture?", - // Collections.emptyList(), - // List.of(getImageFileFromClasspath("emoji-smile.jpeg"))) - // .build(); - // - // OllamaChatResult chatResult = api.chat(requestModel, null); - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // builder.reset(); - // - // requestModel = - // builder.withMessages(chatResult.getChatHistory()) - // .withMessage(OllamaChatMessageRole.USER, "What's the color?") - // .build(); - // - // chatResult = api.chat(requestModel, null); - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // } - // - // // /** - // // * Tests generateWithImages using an image URL as input. - // // * - // // *

Scenario: Calls generateWithImages with a vision model and an image URL, - // expecting a - // // * non-empty response. Usage: generateWithImages, image from URL, no streaming. - // // */ - // // @Test - // // @Order(17) - // // void shouldGenerateWithImageURLs() - // // throws OllamaBaseException { - // // api.pullModel(VISION_MODEL); - // // - // // OllamaResult result = - // // api.generateWithImages( - // // VISION_MODEL, - // // "What is in this image?", - // // List.of( - // // - // // "https://i.pinimg.com/736x/f9/4e/cb/f94ecba040696a3a20b484d2e15159ec.jpg"), - // // new OptionsBuilder().build(), - // // null, - // // null); - // // assertNotNull(result); - // // assertNotNull(result.getResponse()); - // // assertFalse(result.getResponse().isEmpty()); - // // } - // - // /** - // * Tests generateWithImages using an image file as input. - // * - // *

Scenario: Calls generateWithImages with a vision model and an image file, expecting - // a - // * non-empty response. Usage: generateWithImages, image from file, no streaming. - // */ - // @Test - // @Order(18) - // void shouldGenerateWithImageFiles() throws OllamaBaseException { - // api.pullModel(VISION_MODEL); - // try { - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(VISION_MODEL) - // .withPrompt("What is in this image?") - // .withRaw(false) - // .withThink(false) - // .withOptions(new OptionsBuilder().build()) - // .withImages(List.of(getImageFileFromClasspath("roses.jpg"))) - // .withFormat(null) - // .withKeepAlive("0m") - // .build(); - // OllamaGenerateStreamObserver handler = null; - // OllamaResult result = api.generate(request, handler); - // assertNotNull(result); - // assertNotNull(result.getResponse()); - // assertFalse(result.getResponse().isEmpty()); - // } catch (OllamaBaseException e) { - // fail(e); - // } catch (IOException e) { - // throw new RuntimeException(e); - // } - // } - // - // /** - // * Tests generateWithImages with image file input and streaming enabled. - // * - // *

Scenario: Calls generateWithImages with a vision model, an image file, and a - // streaming - // * handler for the response. Usage: generateWithImages, image from file, streaming - // enabled. - // */ - // @Test - // @Order(20) - // void shouldGenerateWithImageFilesAndResponseStreamed() throws OllamaBaseException, - // IOException { - // api.pullModel(VISION_MODEL); - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(VISION_MODEL) - // .withPrompt("What is in this image?") - // .withRaw(false) - // .withThink(false) - // .withOptions(new OptionsBuilder().build()) - // .withImages(List.of(getImageFileFromClasspath("roses.jpg"))) - // .withFormat(null) - // .withKeepAlive("0m") - // .build(); - // OllamaGenerateStreamObserver handler = - // new OllamaGenerateStreamObserver( - // new ConsoleOutputGenerateTokenHandler(), - // new ConsoleOutputGenerateTokenHandler()); - // OllamaResult result = api.generate(request, handler); - // assertNotNull(result); - // assertNotNull(result.getResponse()); - // assertFalse(result.getResponse().isEmpty()); - // } - // - // /** - // * Tests generate with thinking enabled (no streaming). - // * - // *

Scenario: Calls generate with think=true, expecting both response and thinking - // fields to - // * be populated. Usage: generate, think=true, no streaming. - // */ - // @Test - // @Order(20) - // void shouldGenerateWithThinking() throws OllamaBaseException { - // api.pullModel(THINKING_TOOL_MODEL); - // - // boolean raw = false; - // boolean think = true; - // - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(THINKING_TOOL_MODEL) - // .withPrompt("Who are you?") - // .withRaw(raw) - // .withThink(think) - // .withOptions(new OptionsBuilder().build()) - // .withFormat(null) - // .withKeepAlive("0m") - // .build(); - // OllamaGenerateStreamObserver handler = new OllamaGenerateStreamObserver(null, null); - // - // OllamaResult result = api.generate(request, handler); + // THINKING_TOOL_MODEL_2, + // "Validate: 1+1=2", + // raw, + // thinking, + // new OptionsBuilder().build(), + // new OllamaGenerateStreamObserver(null, null)); // assertNotNull(result); // assertNotNull(result.getResponse()); // assertNotNull(result.getThinking()); // } - // - // /** - // * Tests generate with thinking and streaming enabled. - // * - // *

Scenario: Calls generate with think=true and a stream handler for both thinking and - // * response tokens. Usage: generate, think=true, streaming enabled. - // */ - // @Test - // @Order(20) - // void shouldGenerateWithThinkingAndStreamHandler() throws OllamaBaseException { - // api.pullModel(THINKING_TOOL_MODEL); - // boolean raw = false; - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(THINKING_TOOL_MODEL) - // .withPrompt("Who are you?") - // .withRaw(raw) - // .withThink(true) - // .withOptions(new OptionsBuilder().build()) - // .withFormat(null) - // .withKeepAlive("0m") - // .build(); - // OllamaGenerateStreamObserver handler = - // new OllamaGenerateStreamObserver( - // thinkingToken -> { - // LOG.info(thinkingToken.toUpperCase()); - // }, - // resToken -> { - // LOG.info(resToken.toLowerCase()); - // }); - // - // OllamaResult result = api.generate(request, handler); - // assertNotNull(result); - // assertNotNull(result.getResponse()); - // assertNotNull(result.getThinking()); - // } - // - // /** - // * Tests generate with raw=true parameter. - // * - // *

Scenario: Calls generate with raw=true, which sends the prompt as-is without any - // * formatting. Usage: generate, raw=true, no thinking, no streaming. - // */ - // @Test - // @Order(21) - // void shouldGenerateWithRawMode() throws OllamaBaseException { - // api.pullModel(GENERAL_PURPOSE_MODEL); - // api.unloadModel(GENERAL_PURPOSE_MODEL); - // boolean raw = true; - // boolean thinking = false; - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(GENERAL_PURPOSE_MODEL) - // .withPrompt("What is 2+2?") - // .withRaw(raw) - // .withThink(thinking) - // .withOptions(new OptionsBuilder().build()) - // .withFormat(null) - // .withKeepAlive("0m") - // .build(); - // OllamaGenerateStreamObserver handler = new OllamaGenerateStreamObserver(null, null); - // OllamaResult result = api.generate(request, handler); - // assertNotNull(result); - // assertNotNull(result.getResponse()); - // assertFalse(result.getResponse().isEmpty()); - // } - // - // /** - // * Tests generate with raw=true and streaming enabled. - // * - // *

Scenario: Calls generate with raw=true and streams the response. Usage: generate, - // * raw=true, no thinking, streaming enabled. - // */ - // @Test - // @Order(22) - // void shouldGenerateWithRawModeAndStreaming() throws OllamaBaseException { - // api.pullModel(GENERAL_PURPOSE_MODEL); - // boolean raw = true; - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(GENERAL_PURPOSE_MODEL) - // .withPrompt("What is the largest planet in our solar system?") - // .withRaw(raw) - // .withThink(false) - // .withOptions(new OptionsBuilder().build()) - // .withFormat(null) - // .withKeepAlive("0m") - // .build(); - // OllamaGenerateStreamObserver handler = - // new OllamaGenerateStreamObserver(null, new - // ConsoleOutputGenerateTokenHandler()); - // OllamaResult result = api.generate(request, handler); - // - // assertNotNull(result); - // assertNotNull(result.getResponse()); - // assertFalse(result.getResponse().isEmpty()); - // } - // - // // /** - // // * Tests generate with raw=true and thinking enabled. - // // * - // // *

Scenario: Calls generate with raw=true and think=true combination. Usage: - // generate, - // // * raw=true, thinking enabled, no streaming. - // // */ - // // @Test - // // @Order(23) - // // void shouldGenerateWithRawModeAndThinking() - // // throws OllamaBaseException - // // { - // // api.pullModel(THINKING_TOOL_MODEL_2); - // // api.unloadModel(THINKING_TOOL_MODEL_2); - // // boolean raw = - // // true; // if true no formatting will be applied to the prompt. You may - // choose - // // to use - // // // the raw parameter if you are specifying a full templated prompt in your - // // // request to the API - // // boolean thinking = true; - // // OllamaResult result = - // // api.generate( - // // THINKING_TOOL_MODEL_2, - // // "Validate: 1+1=2", - // // raw, - // // thinking, - // // new OptionsBuilder().build(), - // // new OllamaGenerateStreamObserver(null, null)); - // // assertNotNull(result); - // // assertNotNull(result.getResponse()); - // // assertNotNull(result.getThinking()); - // // } - // - // /** - // * Tests generate with all parameters enabled: raw=true, thinking=true, and streaming. - // * - // *

Scenario: Calls generate with all possible parameters enabled. Usage: generate, - // raw=true, - // * thinking enabled, streaming enabled. - // */ - // @Test - // @Order(24) - // void shouldGenerateWithAllParametersEnabled() throws OllamaBaseException { - // api.pullModel(THINKING_TOOL_MODEL); - // // Settinng raw here instructs to keep the response raw. Even if the model generates - // // 'thinking' tokens, they will not be received as separate tokens and will be mised - // with - // // 'response' tokens - // boolean raw = true; - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(THINKING_TOOL_MODEL) - // .withPrompt( - // "Count 1 to 5. Just give me the numbers and do not give any - // other" - // + " details or information.") - // .withRaw(raw) - // .withThink(true) - // .withOptions(new OptionsBuilder().setTemperature(0.1f).build()) - // .withFormat(null) - // .withKeepAlive("0m") - // .build(); - // OllamaGenerateStreamObserver handler = - // new OllamaGenerateStreamObserver( - // thinkingToken -> LOG.info("THINKING: {}", thinkingToken), - // responseToken -> LOG.info("RESPONSE: {}", responseToken)); - // OllamaResult result = api.generate(request, handler); - // assertNotNull(result); - // assertNotNull(result.getResponse()); - // assertNotNull(result.getThinking()); - // } - // - // /** - // * Tests generateWithFormat with complex nested JSON schema. - // * - // *

Scenario: Uses a more complex JSON schema with nested objects and arrays. Usage: - // * generateWithFormat with complex schema. - // */ - // @Test - // @Order(25) - // void shouldGenerateWithComplexStructuredOutput() throws OllamaBaseException { - // api.pullModel(TOOLS_MODEL); - // - // String prompt = - // "Generate information about three major cities: their names, populations, and - // top" - // + " attractions."; - // - // Map format = new HashMap<>(); - // format.put("type", "object"); - // Map properties = new HashMap<>(); - // - // Map citiesProperty = new HashMap<>(); - // citiesProperty.put("type", "array"); - // - // Map cityItem = new HashMap<>(); - // cityItem.put("type", "object"); - // - // Map cityProperties = new HashMap<>(); - // cityProperties.put("name", Map.of("type", "string")); - // cityProperties.put("population", Map.of("type", "number")); - // - // Map attractionsProperty = new HashMap<>(); - // attractionsProperty.put("type", "array"); - // attractionsProperty.put("items", Map.of("type", "string")); - // cityProperties.put("attractions", attractionsProperty); - // - // cityItem.put("properties", cityProperties); - // cityItem.put("required", List.of("name", "population", "attractions")); - // - // citiesProperty.put("items", cityItem); - // properties.put("cities", citiesProperty); - // - // format.put("properties", properties); - // format.put("required", List.of("cities")); - // - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(TOOLS_MODEL) - // .withPrompt(prompt) - // .withFormat(format) - // .withKeepAlive("0m") - // .build(); - // OllamaGenerateStreamObserver handler = null; - // - // OllamaResult result = api.generate(request, handler); - // - // assertNotNull(result); - // assertNotNull(result.getResponse()); - // assertNotNull(result.getStructuredResponse()); - // assertTrue(result.getStructuredResponse().containsKey("cities")); - // } - // - // /** - // * Tests chat with thinking enabled but no streaming. - // * - // *

Scenario: Enables thinking in chat mode without streaming. Usage: chat, thinking - // enabled, - // * no streaming, no tools. - // */ - // @Test - // @Order(26) - // void shouldChatWithThinkingNoStream() throws OllamaBaseException { - // api.pullModel(THINKING_TOOL_MODEL); - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(THINKING_TOOL_MODEL); - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "What is the meaning of life? Think deeply about this.") - // .withThinking(true) - // .build(); - // - // OllamaChatResult chatResult = api.chat(requestModel, null); - // - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // assertNotNull(chatResult.getResponseModel().getMessage()); - // assertNotNull(chatResult.getResponseModel().getMessage().getResponse()); - // // Note: Thinking content might be in the message or separate field depending on - // // implementation - // } - // - // /** - // * Tests chat with custom options and streaming. - // * - // *

Scenario: Combines custom options (temperature, top_p, etc.) with streaming. Usage: - // chat, - // * custom options, streaming enabled, no tools, no thinking. - // */ - // @Test - // @Order(27) - // void shouldChatWithCustomOptionsAndStreaming() throws OllamaBaseException { - // api.pullModel(GENERAL_PURPOSE_MODEL); - // - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(GENERAL_PURPOSE_MODEL); - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "Tell me a creative story about a time traveler") - // .withOptions( - // new OptionsBuilder() - // .setTemperature(0.9f) - // .setTopP(0.9f) - // .setTopK(40) - // .build()) - // .build(); - // - // OllamaChatResult chatResult = api.chat(requestModel, new - // ConsoleOutputChatTokenHandler()); - // - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // assertNotNull(chatResult.getResponseModel().getMessage().getResponse()); - // assertFalse(chatResult.getResponseModel().getMessage().getResponse().isEmpty()); - // } - // - // /** - // * Tests chat with tools, thinking, and streaming all enabled. - // * - // *

Scenario: The most complex chat scenario with all features enabled. Usage: chat, - // tools, - // * thinking enabled, streaming enabled. - // */ - // @Test - // @Order(28) - // void shouldChatWithToolsThinkingAndStreaming() throws OllamaBaseException { - // api.pullModel(THINKING_TOOL_MODEL_2); - // - // api.registerTool(employeeFinderTool()); - // - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(THINKING_TOOL_MODEL_2); - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "I need to find information about employee John Smith. Think" - // + " carefully about what details to retrieve.") - // .withThinking(true) - // .withOptions(new OptionsBuilder().setTemperature(0.1f).build()) - // .build(); - // requestModel.setUseTools(false); - // OllamaChatResult chatResult = api.chat(requestModel, new - // ConsoleOutputChatTokenHandler()); - // - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // // Verify that either tools were called or a response was generated - // assertTrue(chatResult.getChatHistory().size() >= 2); - // } - // - // // /** - // // * Tests generateWithImages with multiple image URLs. - // // * - // // *

Scenario: Sends multiple image URLs to the vision model. Usage: - // generateWithImages, - // // * multiple image URLs, no streaming. - // // */ - // // @Test - // // @Order(29) - // // void shouldGenerateWithMultipleImageURLs() throws OllamaBaseException { - // // api.pullModel(VISION_MODEL); - // // - // // List imageUrls = - // // Arrays.asList( - // // - // // "https://i.pinimg.com/736x/f9/4e/cb/f94ecba040696a3a20b484d2e15159ec.jpg", - // // - // // - // "https://t3.ftcdn.net/jpg/02/96/63/80/360_F_296638053_0gUVA4WVBKceGsIr7LNqRWSnkusi07dq.jpg"); - // // OllamaResult result = - // // api.generateWithImages( - // // VISION_MODEL, - // // "Compare these two images. What are the similarities and - // // differences?", - // // imageUrls, - // // new OptionsBuilder().build(), - // // null, - // // null); - // // - // // assertNotNull(result); - // // assertNotNull(result.getResponse()); - // // assertFalse(result.getResponse().isEmpty()); - // // } - // - // // /** - // // * Tests generateWithImages with mixed image sources (URL and file). - // // * - // // *

Scenario: Combines image URL with local file in a single request. Usage: - // // * generateWithImages, mixed image sources, no streaming. - // // */ - // // @Test - // // @Order(30) - // // void shouldGenerateWithMixedImageSources() throws OllamaBaseException { - // // api.pullModel(VISION_MODEL); - // // - // // File localImage = getImageFileFromClasspath("emoji-smile.jpeg"); - // // List images = - // // Arrays.asList( - // // - // // "https://i.pinimg.com/736x/f9/4e/cb/f94ecba040696a3a20b484d2e15159ec.jpg", - // // localImage); - // // - // // OllamaResult result = - // // api.generateWithImages( - // // VISION_MODEL, - // // "Describe what you see in these images", - // // images, - // // new OptionsBuilder().build(), - // // null, - // // null); - // // - // // assertNotNull(result); - // // assertNotNull(result.getResponse()); - // // assertFalse(result.getResponse().isEmpty()); - // // } - // - // /** - // * Tests chat with multiple images in a single message. - // * - // *

Scenario: Sends multiple images in one chat message. Usage: chat, vision model, - // multiple - // * images, no tools, no thinking, no streaming. - // */ - // @Test - // @Order(31) - // void shouldChatWithMultipleImages() throws OllamaBaseException { - // api.pullModel(VISION_MODEL); - // - // List tools = Collections.emptyList(); - // - // File image1 = getImageFileFromClasspath("emoji-smile.jpeg"); - // File image2 = getImageFileFromClasspath("roses.jpg"); - // - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(VISION_MODEL); - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "Compare these images and tell me what you see", - // tools, - // Arrays.asList(image1, image2)) - // .build(); - // requestModel.setUseTools(false); - // OllamaChatResult chatResult = api.chat(requestModel, null); - // - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // assertNotNull(chatResult.getResponseModel().getMessage().getResponse()); - // assertFalse(chatResult.getResponseModel().getMessage().getResponse().isEmpty()); - // } - // - // /** - // * Tests error handling when model doesn't exist. - // * - // *

Scenario: Attempts to use a non-existent model and verifies proper error handling. - // */ - // @Test - // @Order(32) - // void shouldHandleNonExistentModel() { - // String nonExistentModel = "this-model-does-not-exist:latest"; - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(nonExistentModel) - // .withPrompt("Hello") - // .withRaw(false) - // .withThink(false) - // .withOptions(new OptionsBuilder().build()) - // .withKeepAlive("0m") - // .build(); - // OllamaGenerateStreamObserver handler = new OllamaGenerateStreamObserver(null, null); - // assertThrows( - // OllamaBaseException.class, - // () -> { - // api.generate(request, handler); - // }); - // } - // - // /** - // * Tests chat with empty message (edge case). - // * - // *

Scenario: Sends an empty or whitespace-only message. Usage: chat, edge case testing. - // */ - // @Test - // @Order(33) - // void shouldHandleEmptyMessage() throws OllamaBaseException { - // api.pullModel(GENERAL_PURPOSE_MODEL); - // - // List tools = Collections.emptyList(); - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(GENERAL_PURPOSE_MODEL); - // OllamaChatRequest requestModel = - // builder.withMessage(OllamaChatMessageRole.USER, " ", tools) // whitespace - // only - // .build(); - // requestModel.setUseTools(false); - // OllamaChatResult chatResult = api.chat(requestModel, null); - // - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // // Should handle gracefully even with empty input - // } - // - // /** - // * Tests generate with very high temperature setting. - // * - // *

Scenario: Tests extreme parameter values for robustness. Usage: generate, extreme - // * parameters, edge case testing. - // */ - // @Test - // @Order(34) - // void shouldGenerateWithExtremeParameters() throws OllamaBaseException { - // api.pullModel(GENERAL_PURPOSE_MODEL); - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(GENERAL_PURPOSE_MODEL) - // .withPrompt("Generate a random word") - // .withRaw(false) - // .withThink(false) - // .withOptions( - // new OptionsBuilder() - // .setTemperature(2.0f) // Very high temperature - // .setTopP(1.0f) - // .setTopK(1) - // .build()) - // .withKeepAlive("0m") - // .build(); - // OllamaGenerateStreamObserver handler = new OllamaGenerateStreamObserver(null, null); - // OllamaResult result = api.generate(request, handler); - // assertNotNull(result); - // assertNotNull(result.getResponse()); - // } - // - // /** - // * Tests embeddings with single input string. - // * - // *

Scenario: Tests embedding generation with a single string instead of array. Usage: - // embed, - // * single input. - // */ - // @Test - // @Order(35) - // void shouldReturnEmbeddingsForSingleInput() throws Exception { - // api.pullModel(EMBEDDING_MODEL); - // - // OllamaEmbedRequestModel requestModel = new OllamaEmbedRequestModel(); - // requestModel.setModel(EMBEDDING_MODEL); - // requestModel.setInput( - // Collections.singletonList("This is a single test sentence for embedding.")); - // - // OllamaEmbedResponseModel embeddings = api.embed(requestModel); - // - // assertNotNull(embeddings); - // assertFalse(embeddings.getEmbeddings().isEmpty()); - // assertEquals(1, embeddings.getEmbeddings().size()); - // } - // - // /** - // * Tests chat with keep-alive parameter. - // * - // *

Scenario: Tests the keep-alive parameter which controls model unloading. Usage: - // chat, - // * keep-alive parameter, model lifecycle management. - // */ - // @Test - // @Order(36) - // void shouldChatWithKeepAlive() throws OllamaBaseException { - // api.pullModel(GENERAL_PURPOSE_MODEL); - // - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder().withModel(GENERAL_PURPOSE_MODEL); - // OllamaChatRequest requestModel = - // builder.withMessage(OllamaChatMessageRole.USER, "Hello, how are you?") - // .withKeepAlive("5m") // Keep model loaded for 5 minutes - // .build(); - // requestModel.setUseTools(false); - // OllamaChatResult chatResult = api.chat(requestModel, null); - // - // assertNotNull(chatResult); - // assertNotNull(chatResult.getResponseModel()); - // assertNotNull(chatResult.getResponseModel().getMessage().getResponse()); - // } - // - // /** - // * Tests generate with custom context window options. - // * - // *

Scenario: Tests generation with custom context length and other advanced options. - // Usage: - // * generate, advanced options, context management. - // */ - // @Test - // @Order(37) - // void shouldGenerateWithAdvancedOptions() throws OllamaBaseException { - // api.pullModel(GENERAL_PURPOSE_MODEL); - // OllamaGenerateRequest request = - // OllamaGenerateRequestBuilder.builder() - // .withModel(GENERAL_PURPOSE_MODEL) - // .withPrompt("Write a detailed explanation of machine learning") - // .withRaw(false) - // .withThink(false) - // .withOptions( - // new OptionsBuilder() - // .setTemperature(0.7f) - // .setTopP(0.9f) - // .setTopK(40) - // .setNumCtx(4096) // Context window size - // .setRepeatPenalty(1.1f) - // .build()) - // .withKeepAlive("0m") - // .build(); - // OllamaGenerateStreamObserver handler = new OllamaGenerateStreamObserver(null, null); - // OllamaResult result = api.generate(request, handler); - // - // assertNotNull(result); - // assertNotNull(result.getResponse()); - // assertFalse(result.getResponse().isEmpty()); - // } - // - // /** - // * Tests concurrent chat requests to verify thread safety. - // * - // *

Scenario: Sends multiple chat requests concurrently to test thread safety. Usage: - // chat, - // * concurrency testing, thread safety. - // */ - // @Test - // @Order(38) - // void shouldHandleConcurrentChatRequests() throws OllamaBaseException, InterruptedException - // { - // api.pullModel(GENERAL_PURPOSE_MODEL); - // - // int numThreads = 3; - // CountDownLatch latch = new CountDownLatch(numThreads); - // List results = Collections.synchronizedList(new ArrayList<>()); - // List exceptions = Collections.synchronizedList(new ArrayList<>()); - // - // for (int i = 0; i < numThreads; i++) { - // final int threadId = i; - // Thread thread = - // new Thread( - // () -> { - // try { - // OllamaChatRequestBuilder builder = - // OllamaChatRequestBuilder.builder() - // .withModel(GENERAL_PURPOSE_MODEL); - // OllamaChatRequest requestModel = - // builder.withMessage( - // OllamaChatMessageRole.USER, - // "Hello from thread " - // + threadId - // + ". What is 2+2?") - // .build(); - // requestModel.setUseTools(false); - // OllamaChatResult result = api.chat(requestModel, null); - // results.add(result); - // } catch (Exception e) { - // exceptions.add(e); - // } finally { - // latch.countDown(); - // } - // }); - // thread.start(); - // } - // - // latch.await(60, java.util.concurrent.TimeUnit.SECONDS); - // - // assertTrue(exceptions.isEmpty(), "No exceptions should occur during concurrent - // requests"); - // assertEquals(numThreads, results.size(), "All requests should complete successfully"); - // - // for (OllamaChatResult result : results) { - // assertNotNull(result); - // assertNotNull(result.getResponseModel()); - // assertNotNull(result.getResponseModel().getMessage().getResponse()); - // } - // } - // - // /** - // * Utility method to retrieve an image file from the classpath. - // * - // *

- // * - // * @param fileName the name of the image file - // * @return the File object for the image - // */ - // private File getImageFileFromClasspath(String fileName) { - // ClassLoader classLoader = getClass().getClassLoader(); - // return new File(Objects.requireNonNull(classLoader.getResource(fileName)).getFile()); - // } - // - // /** - // * Returns a ToolSpecification for an employee finder tool. - // * - // *

This tool can be registered with the OllamaAPI to enable tool-calling scenarios in - // chat. - // * The tool accepts employee-name, employee-address, and employee-phone as parameters. - // */ - // private Tools.ToolSpecification employeeFinderTool() { - // return Tools.ToolSpecification.builder() - // .functionName("get-employee-details") - // .functionDescription("Get details for a person or an employee") - // .toolPrompt( - // Tools.PromptFuncDefinition.builder() - // .type("function") - // .function( - // Tools.PromptFuncDefinition.PromptFuncSpec.builder() - // .name("get-employee-details") - // .description( - // "Get details for a person or an - // employee") - // .parameters( - // Tools.PromptFuncDefinition.Parameters - // .builder() - // .type("object") - // .properties( - // new - // Tools.PropsBuilder() - // .withProperty( - // - // "employee-name", - // Tools - // - // .PromptFuncDefinition - // - // .Property - // - // .builder() - // - // .type( - // - // "string") - // - // .description( - // - // "The name" - // - // + " of the" - // - // + " employee," - // - // + " e.g." - // - // + " John" - // - // + " Doe") - // - // .required( - // - // true) - // - // .build()) - // .withProperty( - // - // "employee-address", - // Tools - // - // .PromptFuncDefinition - // - // .Property - // - // .builder() - // - // .type( - // - // "string") - // - // .description( - // - // "The address" - // - // + " of the" - // - // + " employee," - // - // + " Always" - // - // + " returns" - // - // + " a random" - // - // + " address." - // - // + " For example," - // - // + " Church" - // - // + " St, Bengaluru," - // - // + " India") - // - // .required( - // - // true) - // - // .build()) - // .withProperty( - // - // "employee-phone", - // Tools - // - // .PromptFuncDefinition - // - // .Property - // - // .builder() - // - // .type( - // - // "string") - // - // .description( - // - // "The phone" - // - // + " number" - // - // + " of the" - // - // + " employee." - // - // + " Always" - // - // + " returns" - // - // + " a random" - // - // + " phone" - // - // + " number." - // - // + " For example," - // - // + " 9911002233") - // - // .required( - // - // true) - // - // .build()) - // .build()) - // - // .required(List.of("employee-name")) - // .build()) - // .build()) - // .build()) - // .toolFunction( - // new ToolFunction() { - // @Override - // public Object apply(Map arguments) { - // LOG.info( - // "Invoking employee finder tool with arguments: {}", - // arguments); - // String employeeName = "Random Employee"; - // if (arguments.containsKey("employee-name")) { - // employeeName = arguments.get("employee-name").toString(); - // } - // String address = null; - // String phone = null; - // if (employeeName.equalsIgnoreCase("Rahul Kumar")) { - // address = "Pune, Maharashtra, India"; - // phone = "9911223344"; - // } else { - // address = "Karol Bagh, Delhi, India"; - // phone = "9911002233"; - // } - // // perform DB operations here - // return String.format( - // "Employee Details {ID: %s, Name: %s, Address: %s, - // Phone:" - // + " %s}", - // UUID.randomUUID(), employeeName, address, phone); - // } - // }) - // .build(); - // } + + /** + * Tests generate with all parameters enabled: raw=true, thinking=true, and streaming. + * + *

Scenario: Calls generate with all possible parameters enabled. Usage: generate, raw=true, + * thinking enabled, streaming enabled. + */ + @Test + @Order(24) + void shouldGenerateWithAllParametersEnabled() throws OllamaBaseException { + api.pullModel(THINKING_TOOL_MODEL); + // Settinng raw here instructs to keep the response raw. Even if the model generates + // 'thinking' tokens, they will not be received as separate tokens and will be mised with + // 'response' tokens + boolean raw = true; + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(THINKING_TOOL_MODEL) + .withPrompt( + "Count 1 to 5. Just give me the numbers and do not give any other" + + " details or information.") + .withRaw(raw) + .withThink(true) + .withOptions(new OptionsBuilder().setTemperature(0.1f).build()) + .withFormat(null) + .withKeepAlive("0m") + .build(); + OllamaGenerateStreamObserver handler = + new OllamaGenerateStreamObserver( + thinkingToken -> LOG.info("THINKING: {}", thinkingToken), + responseToken -> LOG.info("RESPONSE: {}", responseToken)); + OllamaResult result = api.generate(request, handler); + assertNotNull(result); + assertNotNull(result.getResponse()); + assertNotNull(result.getThinking()); + } + + /** + * Tests generateWithFormat with complex nested JSON schema. + * + *

Scenario: Uses a more complex JSON schema with nested objects and arrays. Usage: + * generateWithFormat with complex schema. + */ + @Test + @Order(25) + void shouldGenerateWithComplexStructuredOutput() throws OllamaBaseException { + api.pullModel(TOOLS_MODEL); + + String prompt = + "Generate information about three major cities: their names, populations, and top" + + " attractions."; + + Map format = new HashMap<>(); + format.put("type", "object"); + Map properties = new HashMap<>(); + + Map citiesProperty = new HashMap<>(); + citiesProperty.put("type", "array"); + + Map cityItem = new HashMap<>(); + cityItem.put("type", "object"); + + Map cityProperties = new HashMap<>(); + cityProperties.put("name", Map.of("type", "string")); + cityProperties.put("population", Map.of("type", "number")); + + Map attractionsProperty = new HashMap<>(); + attractionsProperty.put("type", "array"); + attractionsProperty.put("items", Map.of("type", "string")); + cityProperties.put("attractions", attractionsProperty); + + cityItem.put("properties", cityProperties); + cityItem.put("required", List.of("name", "population", "attractions")); + + citiesProperty.put("items", cityItem); + properties.put("cities", citiesProperty); + + format.put("properties", properties); + format.put("required", List.of("cities")); + + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(TOOLS_MODEL) + .withPrompt(prompt) + .withFormat(format) + .withKeepAlive("0m") + .build(); + OllamaGenerateStreamObserver handler = null; + + OllamaResult result = api.generate(request, handler); + + assertNotNull(result); + assertNotNull(result.getResponse()); + assertNotNull(result.getStructuredResponse()); + assertTrue(result.getStructuredResponse().containsKey("cities")); + } + + /** + * Tests chat with thinking enabled but no streaming. + * + *

Scenario: Enables thinking in chat mode without streaming. Usage: chat, thinking enabled, + * no streaming, no tools. + */ + @Test + @Order(26) + void shouldChatWithThinkingNoStream() throws OllamaBaseException { + api.pullModel(THINKING_TOOL_MODEL); + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(THINKING_TOOL_MODEL); + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "What is the meaning of life? Think deeply about this.") + .withThinking(true) + .build(); + + OllamaChatResult chatResult = api.chat(requestModel, null); + + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + assertNotNull(chatResult.getResponseModel().getMessage()); + assertNotNull(chatResult.getResponseModel().getMessage().getResponse()); + // Note: Thinking content might be in the message or separate field depending on + // implementation + } + + /** + * Tests chat with custom options and streaming. + * + *

Scenario: Combines custom options (temperature, top_p, etc.) with streaming. Usage: chat, + * custom options, streaming enabled, no tools, no thinking. + */ + @Test + @Order(27) + void shouldChatWithCustomOptionsAndStreaming() throws OllamaBaseException { + api.pullModel(GENERAL_PURPOSE_MODEL); + + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(GENERAL_PURPOSE_MODEL); + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "Tell me a creative story about a time traveler") + .withOptions( + new OptionsBuilder() + .setTemperature(0.9f) + .setTopP(0.9f) + .setTopK(40) + .build()) + .build(); + + OllamaChatResult chatResult = api.chat(requestModel, new ConsoleOutputChatTokenHandler()); + + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + assertNotNull(chatResult.getResponseModel().getMessage().getResponse()); + assertFalse(chatResult.getResponseModel().getMessage().getResponse().isEmpty()); + } + + /** + * Tests chat with tools, thinking, and streaming all enabled. + * + *

Scenario: The most complex chat scenario with all features enabled. Usage: chat, tools, + * thinking enabled, streaming enabled. + */ + @Test + @Order(28) + void shouldChatWithToolsThinkingAndStreaming() throws OllamaBaseException { + api.pullModel(THINKING_TOOL_MODEL_2); + + api.registerTool(EmployeeFinderToolSpec.getSpecification()); + + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(THINKING_TOOL_MODEL_2); + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "I need to find information about employee John Smith. Think" + + " carefully about what details to retrieve.") + .withThinking(true) + .withOptions(new OptionsBuilder().setTemperature(0.1f).build()) + .build(); + requestModel.setUseTools(false); + OllamaChatResult chatResult = api.chat(requestModel, new ConsoleOutputChatTokenHandler()); + + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + // Verify that either tools were called or a response was generated + assertTrue(chatResult.getChatHistory().size() >= 2); + } + + /** + * Tests chat with multiple images in a single message. + * + *

Scenario: Sends multiple images in one chat message. Usage: chat, vision model, multiple + * images, no tools, no thinking, no streaming. + */ + @Test + @Order(31) + void shouldChatWithMultipleImages() throws OllamaBaseException { + api.pullModel(VISION_MODEL); + + List tools = Collections.emptyList(); + + File image1 = getImageFileFromClasspath("emoji-smile.jpeg"); + File image2 = getImageFileFromClasspath("roses.jpg"); + + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(VISION_MODEL); + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "Compare these images and tell me what you see", + tools, + Arrays.asList(image1, image2)) + .build(); + requestModel.setUseTools(false); + OllamaChatResult chatResult = api.chat(requestModel, null); + + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + assertNotNull(chatResult.getResponseModel().getMessage().getResponse()); + assertFalse(chatResult.getResponseModel().getMessage().getResponse().isEmpty()); + } + + /** + * Tests error handling when model doesn't exist. + * + *

Scenario: Attempts to use a non-existent model and verifies proper error handling. + */ + @Test + @Order(32) + void shouldHandleNonExistentModel() { + String nonExistentModel = "this-model-does-not-exist:latest"; + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(nonExistentModel) + .withPrompt("Hello") + .withRaw(false) + .withThink(false) + .withOptions(new OptionsBuilder().build()) + .withKeepAlive("0m") + .build(); + OllamaGenerateStreamObserver handler = new OllamaGenerateStreamObserver(null, null); + assertThrows( + OllamaBaseException.class, + () -> { + api.generate(request, handler); + }); + } + + /** + * Tests chat with empty message (edge case). + * + *

Scenario: Sends an empty or whitespace-only message. Usage: chat, edge case testing. + */ + @Test + @Order(33) + void shouldHandleEmptyMessage() throws OllamaBaseException { + api.pullModel(GENERAL_PURPOSE_MODEL); + + List tools = Collections.emptyList(); + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(GENERAL_PURPOSE_MODEL); + OllamaChatRequest requestModel = + builder.withMessage(OllamaChatMessageRole.USER, " ", tools) // whitespace only + .build(); + requestModel.setUseTools(false); + OllamaChatResult chatResult = api.chat(requestModel, null); + + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + // Should handle gracefully even with empty input + } + + /** + * Tests generate with very high temperature setting. + * + *

Scenario: Tests extreme parameter values for robustness. Usage: generate, extreme + * parameters, edge case testing. + */ + @Test + @Order(34) + void shouldGenerateWithExtremeParameters() throws OllamaBaseException { + api.pullModel(GENERAL_PURPOSE_MODEL); + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(GENERAL_PURPOSE_MODEL) + .withPrompt("Generate a random word") + .withRaw(false) + .withThink(false) + .withOptions( + new OptionsBuilder() + .setTemperature(2.0f) // Very high temperature + .setTopP(1.0f) + .setTopK(1) + .build()) + .withKeepAlive("0m") + .build(); + OllamaGenerateStreamObserver handler = new OllamaGenerateStreamObserver(null, null); + OllamaResult result = api.generate(request, handler); + assertNotNull(result); + assertNotNull(result.getResponse()); + } + + /** + * Tests embeddings with single input string. + * + *

Scenario: Tests embedding generation with a single string instead of array. Usage: embed, + * single input. + */ + @Test + @Order(35) + void shouldReturnEmbeddingsForSingleInput() throws Exception { + api.pullModel(EMBEDDING_MODEL); + + OllamaEmbedRequestModel requestModel = new OllamaEmbedRequestModel(); + requestModel.setModel(EMBEDDING_MODEL); + requestModel.setInput( + Collections.singletonList("This is a single test sentence for embedding.")); + + OllamaEmbedResponseModel embeddings = api.embed(requestModel); + + assertNotNull(embeddings); + assertFalse(embeddings.getEmbeddings().isEmpty()); + assertEquals(1, embeddings.getEmbeddings().size()); + } + + /** + * Tests chat with keep-alive parameter. + * + *

Scenario: Tests the keep-alive parameter which controls model unloading. Usage: chat, + * keep-alive parameter, model lifecycle management. + */ + @Test + @Order(36) + void shouldChatWithKeepAlive() throws OllamaBaseException { + api.pullModel(GENERAL_PURPOSE_MODEL); + + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder().withModel(GENERAL_PURPOSE_MODEL); + OllamaChatRequest requestModel = + builder.withMessage(OllamaChatMessageRole.USER, "Hello, how are you?") + .withKeepAlive("5m") // Keep model loaded for 5 minutes + .build(); + requestModel.setUseTools(false); + OllamaChatResult chatResult = api.chat(requestModel, null); + + assertNotNull(chatResult); + assertNotNull(chatResult.getResponseModel()); + assertNotNull(chatResult.getResponseModel().getMessage().getResponse()); + } + + /** + * Tests generate with custom context window options. + * + *

Scenario: Tests generation with custom context length and other advanced options. Usage: + * generate, advanced options, context management. + */ + @Test + @Order(37) + void shouldGenerateWithAdvancedOptions() throws OllamaBaseException { + api.pullModel(GENERAL_PURPOSE_MODEL); + OllamaGenerateRequest request = + OllamaGenerateRequestBuilder.builder() + .withModel(GENERAL_PURPOSE_MODEL) + .withPrompt("Write a detailed explanation of machine learning") + .withRaw(false) + .withThink(false) + .withOptions( + new OptionsBuilder() + .setTemperature(0.7f) + .setTopP(0.9f) + .setTopK(40) + .setNumCtx(4096) // Context window size + .setRepeatPenalty(1.1f) + .build()) + .withKeepAlive("0m") + .build(); + OllamaGenerateStreamObserver handler = new OllamaGenerateStreamObserver(null, null); + OllamaResult result = api.generate(request, handler); + + assertNotNull(result); + assertNotNull(result.getResponse()); + assertFalse(result.getResponse().isEmpty()); + } + + /** + * Tests concurrent chat requests to verify thread safety. + * + *

Scenario: Sends multiple chat requests concurrently to test thread safety. Usage: chat, + * concurrency testing, thread safety. + */ + @Test + @Order(38) + void shouldHandleConcurrentChatRequests() throws OllamaBaseException, InterruptedException { + api.pullModel(GENERAL_PURPOSE_MODEL); + + int numThreads = 3; + CountDownLatch latch = new CountDownLatch(numThreads); + List results = Collections.synchronizedList(new ArrayList<>()); + List exceptions = Collections.synchronizedList(new ArrayList<>()); + + for (int i = 0; i < numThreads; i++) { + final int threadId = i; + Thread thread = + new Thread( + () -> { + try { + OllamaChatRequestBuilder builder = + OllamaChatRequestBuilder.builder() + .withModel(GENERAL_PURPOSE_MODEL); + OllamaChatRequest requestModel = + builder.withMessage( + OllamaChatMessageRole.USER, + "Hello from thread " + + threadId + + ". What is 2+2?") + .build(); + requestModel.setUseTools(false); + OllamaChatResult result = api.chat(requestModel, null); + results.add(result); + } catch (Exception e) { + exceptions.add(e); + } finally { + latch.countDown(); + } + }); + thread.start(); + } + + latch.await(60, java.util.concurrent.TimeUnit.SECONDS); + + assertTrue(exceptions.isEmpty(), "No exceptions should occur during concurrent requests"); + assertEquals(numThreads, results.size(), "All requests should complete successfully"); + + for (OllamaChatResult result : results) { + assertNotNull(result); + assertNotNull(result.getResponseModel()); + assertNotNull(result.getResponseModel().getMessage().getResponse()); + } + } + + /** + * Utility method to retrieve an image file from the classpath. + * + *

+ * + * @param fileName the name of the image file + * @return the File object for the image + */ + private File getImageFileFromClasspath(String fileName) { + ClassLoader classLoader = getClass().getClassLoader(); + return new File(Objects.requireNonNull(classLoader.getResource(fileName)).getFile()); + } +} + +class EmployeeFinderToolSpec { + private EmployeeFinderToolSpec() { + /* empty constructor */ + } + + public static Tools.Tool getSpecification() { + return Tools.Tool.builder() + .toolSpec( + Tools.ToolSpec.builder() + .name("get-employee-details") + .description("Get employee details from the company database") + .parameters( + Tools.Parameters.of( + Map.of( + "employee-name", + Tools.Property.builder() + .type("string") + .description( + "The name of the employee.") + .required(true) + .build(), + "employee-address", + Tools.Property.builder() + .type("string") + .description( + "The address of the" + + " employee.") + .required(true) + .build(), + "employee-phone", + Tools.Property.builder() + .type("string") + .description( + "The phone number of the" + + " employee.") + .required(true) + .build()))) + .build()) + .toolFunction( + arguments -> { + String employeeName = arguments.get("employee-name").toString(); + String address = null; + try { + address = arguments.get("employee-address").toString(); + } catch (Exception e) { + address = "Somewhere on earth."; + } + + Random random = new Random(); + long min = 1_000_000_000L; + long max = 9_999_999_999L; + String phone = + String.valueOf( + min + ((long) (random.nextDouble() * (max - min)))); + + return String.format( + "Employee Details {ID: %s, Name: %s, Address: %s, Phone: %s}", + UUID.randomUUID(), employeeName, address, phone); + }) + .build(); + } }