1package io.github.ollama4j.models.chat;
3import io.github.ollama4j.utils.Options;
4import io.github.ollama4j.utils.Utils;
5import org.slf4j.Logger;
6import org.slf4j.LoggerFactory;
9import java.io.IOException;
10import java.net.URISyntaxException;
11import java.nio.file.Files;
12import java.util.ArrayList;
13import java.util.Collections;
15import java.util.stream.Collectors;
20public class OllamaChatRequestBuilder {
22 private static final Logger LOG = LoggerFactory.getLogger(OllamaChatRequestBuilder.class);
24 private OllamaChatRequestBuilder(String model, List<OllamaChatMessage> messages) {
30 public static OllamaChatRequestBuilder
getInstance(String model) {
31 return new OllamaChatRequestBuilder(model,
new ArrayList<>());
39 request =
new OllamaChatRequest(request.getModel(), request.isThink(),
new ArrayList<>());
43 return withMessage(role, content, Collections.emptyList());
47 List<OllamaChatMessage> messages = this.request.getMessages();
53 List<OllamaChatMessage> messages = this.request.getMessages();
55 List<byte[]> binaryImages = images.
stream().map(file -> {
57 return Files.readAllBytes(file.toPath());
58 }
catch (IOException e) {
59 LOG.warn(
"File '{}' could not be accessed, will not add to message!", file.toPath(), e);
62 }).collect(Collectors.toList());
64 messages.add(
new OllamaChatMessage(role, content,
null, toolCalls, binaryImages));
69 List<OllamaChatMessage> messages = this.request.getMessages();
70 List<byte[]> binaryImages =
null;
71 if (imageUrls.length > 0) {
72 binaryImages =
new ArrayList<>();
73 for (String imageUrl : imageUrls) {
76 }
catch (URISyntaxException e) {
77 LOG.warn(
"URL '{}' could not be accessed, will not add to message!", imageUrl, e);
78 }
catch (IOException e) {
79 LOG.warn(
"Content of URL '{}' could not be read, will not add to message!", imageUrl, e);
84 messages.add(
new OllamaChatMessage(role, content,
null, toolCalls, binaryImages));
88 public OllamaChatRequestBuilder
withMessages(List<OllamaChatMessage> messages) {
89 return new OllamaChatRequestBuilder(request.getModel(), messages);
93 this.request.setOptions(options.getOptionsMap());
98 this.request.setReturnFormatJson(
true);
103 this.request.setTemplate(template);
108 this.request.setStream(
true);
113 this.request.setKeepAlive(keepAlive);
118 this.request.setThink(think);
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)
OllamaChatRequest build()
static OllamaChatRequestBuilder getInstance(String model)
OllamaChatRequestBuilder withThinking(boolean think)
OllamaChatRequestBuilder withStreaming()
OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, List< OllamaChatToolCalls > toolCalls, String... imageUrls)
OllamaChatRequestBuilder withTemplate(String template)
OllamaChatRequestBuilder withOptions(Options options)
static byte[] loadImageBytesFromUrl(String imageUrl)