Ollama4j
A Java library (wrapper/binding) for Ollama server.
Loading...
Searching...
No Matches
OllamaChatRequestBuilder.java
Go to the documentation of this file.
1package io.github.ollama4j.models.chat;
2
3import io.github.ollama4j.utils.Options;
4import io.github.ollama4j.utils.Utils;
5import org.slf4j.Logger;
6import org.slf4j.LoggerFactory;
7
8import java.io.File;
9import java.io.IOException;
10import java.net.URISyntaxException;
11import java.nio.file.Files;
12import java.util.ArrayList;
13import java.util.List;
14import java.util.stream.Collectors;
15
20
21 private static final Logger LOG = LoggerFactory.getLogger(OllamaChatRequestBuilder.class);
22
23 private OllamaChatRequestBuilder(String model, List<OllamaChatMessage> messages) {
24 request = new OllamaChatRequest(model, messages);
25 }
26
27 private OllamaChatRequest request;
28
29 public static OllamaChatRequestBuilder getInstance(String model) {
30 return new OllamaChatRequestBuilder(model, new ArrayList<>());
31 }
32
34 return request;
35 }
36
37 public void reset() {
38 request = new OllamaChatRequest(request.getModel(), new ArrayList<>());
39 }
40
41 public OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, List<File> images) {
42 List<OllamaChatMessage> messages = this.request.getMessages();
43
44 List<byte[]> binaryImages = images.stream().map(file -> {
45 try {
46 return Files.readAllBytes(file.toPath());
47 } catch (IOException e) {
48 LOG.warn(String.format("File '%s' could not be accessed, will not add to message!", file.toPath()), e);
49 return new byte[0];
50 }
51 }).collect(Collectors.toList());
52
53 messages.add(new OllamaChatMessage(role, content, binaryImages));
54 return this;
55 }
56
57 public OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, String... imageUrls) {
58 List<OllamaChatMessage> messages = this.request.getMessages();
59 List<byte[]> binaryImages = null;
60 if (imageUrls.length > 0) {
61 binaryImages = new ArrayList<>();
62 for (String imageUrl : imageUrls) {
63 try {
64 binaryImages.add(Utils.loadImageBytesFromUrl(imageUrl));
65 } catch (URISyntaxException e) {
66 LOG.warn(String.format("URL '%s' could not be accessed, will not add to message!", imageUrl), e);
67 } catch (IOException e) {
68 LOG.warn(String.format("Content of URL '%s' could not be read, will not add to message!", imageUrl), e);
69 }
70 }
71 }
72
73 messages.add(new OllamaChatMessage(role, content, binaryImages));
74 return this;
75 }
76
77 public OllamaChatRequestBuilder withMessages(List<OllamaChatMessage> messages) {
78 return new OllamaChatRequestBuilder(request.getModel(), messages);
79 }
80
82 this.request.setOptions(options.getOptionsMap());
83 return this;
84 }
85
87 this.request.setReturnFormatJson(true);
88 return this;
89 }
90
91 public OllamaChatRequestBuilder withTemplate(String template) {
92 this.request.setTemplate(template);
93 return this;
94 }
95
97 this.request.setStream(true);
98 return this;
99 }
100
101 public OllamaChatRequestBuilder withKeepAlive(String keepAlive) {
102 this.request.setKeepAlive(keepAlive);
103 return this;
104 }
105
106}
OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, String... imageUrls)
OllamaChatRequestBuilder withMessages(List< OllamaChatMessage > messages)
OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, List< File > images)
static OllamaChatRequestBuilder getInstance(String model)
static byte[] loadImageBytesFromUrl(String imageUrl)
Definition Utils.java:25