From 614f7422b668a25510b9d6c32e908cccd3883765 Mon Sep 17 00:00:00 2001 From: amithkoujalgi Date: Thu, 23 Oct 2025 22:20:24 +0530 Subject: [PATCH] Refactor tool handling in Ollama class to merge request-specific and globally registered tools into a single list, ensuring original requests remain unmodified. Also, remove unnecessary newline in documentation for model pulling command. --- docs/blog/2025-03-08-blog/index.md | 1 - src/main/java/io/github/ollama4j/Ollama.java | 14 +++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/blog/2025-03-08-blog/index.md b/docs/blog/2025-03-08-blog/index.md index f520696..1b6f493 100644 --- a/docs/blog/2025-03-08-blog/index.md +++ b/docs/blog/2025-03-08-blog/index.md @@ -209,7 +209,6 @@ To download/pull the model into your Ollama server, run the following command in ```shell ollama pull mistral - ``` You can list the models available on your model server by running the following command in your terminal. diff --git a/src/main/java/io/github/ollama4j/Ollama.java b/src/main/java/io/github/ollama4j/Ollama.java index cfbdf41..36f8bf4 100644 --- a/src/main/java/io/github/ollama4j/Ollama.java +++ b/src/main/java/io/github/ollama4j/Ollama.java @@ -804,9 +804,21 @@ public class Ollama { ocm.setResponse(request.getPrompt()); chatRequest.setMessages(msgs); msgs.add(ocm); + + // Merge request's tools and globally registered tools into a new list to avoid mutating the + // original request + List allTools = new ArrayList<>(); + if (request.getTools() != null) { + allTools.addAll(request.getTools()); + } + List registeredTools = this.getRegisteredTools(); + if (registeredTools != null) { + allTools.addAll(registeredTools); + } + OllamaChatTokenHandler hdlr = null; chatRequest.setUseTools(true); - chatRequest.setTools(request.getTools()); + chatRequest.setTools(allTools); if (streamObserver != null) { chatRequest.setStream(true); if (streamObserver.getResponseStreamHandler() != null) {