9package io.github.ollama4j.models.chat;
11import io.github.ollama4j.utils.Options;
12import io.github.ollama4j.utils.Utils;
14import java.io.IOException;
15import java.nio.file.Files;
16import java.util.ArrayList;
17import java.util.Collections;
19import java.util.stream.Collectors;
21import org.slf4j.Logger;
22import org.slf4j.LoggerFactory;
29 private int imageURLConnectTimeoutSeconds = 10;
30 private int imageURLReadTimeoutSeconds = 10;
32 @Setter
private boolean useTools =
true;
36 request.setMessages(
new ArrayList<>());
44 int imageURLConnectTimeoutSeconds) {
45 this.imageURLConnectTimeoutSeconds = imageURLConnectTimeoutSeconds;
50 this.imageURLReadTimeoutSeconds = imageURLReadTimeoutSeconds;
55 request.setModel(model);
60 request =
new OllamaChatRequest(request.getModel(), request.isThink(),
new ArrayList<>());
64 return withMessage(role, content, Collections.emptyList());
69 List<OllamaChatMessage> messages = this.request.getMessages();
77 List<OllamaChatToolCalls> toolCalls,
79 List<OllamaChatMessage> messages = this.request.getMessages();
80 List<byte[]> binaryImages =
85 return Files.readAllBytes(file.toPath());
86 }
catch (IOException e) {
88 "File '{}' could not be accessed, will not add to"
95 .collect(Collectors.toList());
96 messages.add(
new OllamaChatMessage(role, content,
null, toolCalls, binaryImages));
103 List<OllamaChatToolCalls> toolCalls,
105 throws IOException, InterruptedException {
106 List<OllamaChatMessage> messages = this.request.getMessages();
107 List<byte[]> binaryImages =
null;
108 if (imageUrls.length > 0) {
109 binaryImages =
new ArrayList<>();
110 for (String imageUrl : imageUrls) {
115 imageURLConnectTimeoutSeconds,
116 imageURLReadTimeoutSeconds));
117 }
catch (InterruptedException e) {
118 LOG.error(
"Failed to load image from URL: '{}'. Cause: {}", imageUrl, e);
119 Thread.currentThread().interrupt();
120 throw new InterruptedException(
121 "Interrupted while loading image from URL: " + imageUrl);
122 }
catch (IOException e) {
124 "IOException occurred while loading image from URL '{}'. Cause: {}",
128 throw new IOException(
129 "IOException while loading image from URL: " + imageUrl, e);
133 messages.add(
new OllamaChatMessage(role, content,
null, toolCalls, binaryImages));
138 request.setMessages(messages);
143 this.request.setOptions(options.getOptionsMap());
148 this.request.setFormat(
"json");
153 this.request.setTemplate(template);
158 this.request.setStream(
true);
163 this.request.setKeepAlive(keepAlive);
168 this.request.setThink(think);
173 request.setUseTools(useTools);
OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, List< OllamaChatToolCalls > toolCalls, List< File > images)
OllamaChatRequestBuilder withKeepAlive(String keepAlive)
OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, List< OllamaChatToolCalls > toolCalls)
OllamaChatRequestBuilder withGetJsonResponse()
OllamaChatRequestBuilder withMessages(List< OllamaChatMessage > messages)
OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content)
OllamaChatRequestBuilder withModel(String model)
OllamaChatRequest build()
OllamaChatRequestBuilder withThinking(boolean think)
OllamaChatRequestBuilder withStreaming()
OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, List< OllamaChatToolCalls > toolCalls, String... imageUrls)
OllamaChatRequestBuilder withImageURLReadTimeoutSeconds(int imageURLReadTimeoutSeconds)
OllamaChatRequestBuilder withTemplate(String template)
OllamaChatRequestBuilder withImageURLConnectTimeoutSeconds(int imageURLConnectTimeoutSeconds)
static OllamaChatRequestBuilder builder()
OllamaChatRequestBuilder withOptions(Options options)
static byte[] loadImageBytesFromUrl(String imageUrl, int connectTimeoutSeconds, int readTimeoutSeconds)