diff --git a/docs/docs/apis-generate/chat.md b/docs/docs/apis-generate/chat.md index af23ac4..9ed9e79 100644 --- a/docs/docs/apis-generate/chat.md +++ b/docs/docs/apis-generate/chat.md @@ -82,6 +82,33 @@ You will get a response similar to: ] ``` +## Conversational loop + +```java +public class Main { + + public static void main(String[] args) { + + OllamaAPI ollamaAPI = new OllamaAPI(); + ollamaAPI.setRequestTimeoutSeconds(60); + + OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(""); + + OllamaChatRequest requestModel = builder.withMessage(OllamaChatMessageRole.USER, "").build(); + OllamaChatResult initialChatResult = ollamaAPI.chat(requestModel); + System.out.println(initialChatResult.getResponse()); + + List history = initialChatResult.getChatHistory(); + + while (true) { + OllamaChatResult chatResult = ollamaAPI.chat(builder.withMessages(history).withMessage(OllamaChatMessageRole.USER, " messages){ + private OllamaChatRequestBuilder(String model, List messages) { request = new OllamaChatRequest(model, messages); } private OllamaChatRequest request; - public static OllamaChatRequestBuilder getInstance(String model){ + public static OllamaChatRequestBuilder getInstance(String model) { return new OllamaChatRequestBuilder(model, new ArrayList<>()); } - public OllamaChatRequest build(){ + public OllamaChatRequest build() { return request; } - public void reset(){ + public void reset() { request = new OllamaChatRequest(request.getModel(), new ArrayList<>()); } - public OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, List images){ + public OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, List images) { List messages = this.request.getMessages(); List binaryImages = images.stream().map(file -> { try { return Files.readAllBytes(file.toPath()); } catch (IOException e) { - LOG.warn(String.format("File '%s' could not be accessed, will not add to message!",file.toPath()), e); + LOG.warn(String.format("File '%s' could not be accessed, will not add to message!", file.toPath()), e); return new byte[0]; } }).collect(Collectors.toList()); - messages.add(new OllamaChatMessage(role,content,binaryImages)); + messages.add(new OllamaChatMessage(role, content, binaryImages)); return this; } - public OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, String... imageUrls){ + public OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, String... imageUrls) { List messages = this.request.getMessages(); List binaryImages = null; - if(imageUrls.length>0){ + if (imageUrls.length > 0) { binaryImages = new ArrayList<>(); for (String imageUrl : imageUrls) { - try{ + try { binaryImages.add(Utils.loadImageBytesFromUrl(imageUrl)); - } - catch (URISyntaxException e){ - LOG.warn(String.format("URL '%s' could not be accessed, will not add to message!",imageUrl), e); - } - catch (IOException e){ - LOG.warn(String.format("Content of URL '%s' could not be read, will not add to message!",imageUrl), e); + } catch (URISyntaxException e) { + LOG.warn(String.format("URL '%s' could not be accessed, will not add to message!", imageUrl), e); + } catch (IOException e) { + LOG.warn(String.format("Content of URL '%s' could not be read, will not add to message!", imageUrl), e); } } } - - messages.add(new OllamaChatMessage(role,content,binaryImages)); + + messages.add(new OllamaChatMessage(role, content, binaryImages)); return this; } - public OllamaChatRequestBuilder withMessages(List messages){ - this.request.getMessages().addAll(messages); - return this; + public OllamaChatRequestBuilder withMessages(List messages) { + return new OllamaChatRequestBuilder(request.getModel(), messages); } - public OllamaChatRequestBuilder withOptions(Options options){ + public OllamaChatRequestBuilder withOptions(Options options) { this.request.setOptions(options.getOptionsMap()); return this; } - public OllamaChatRequestBuilder withGetJsonResponse(){ + public OllamaChatRequestBuilder withGetJsonResponse() { this.request.setReturnFormatJson(true); return this; } - public OllamaChatRequestBuilder withTemplate(String template){ + public OllamaChatRequestBuilder withTemplate(String template) { this.request.setTemplate(template); return this; } - public OllamaChatRequestBuilder withStreaming(){ + public OllamaChatRequestBuilder withStreaming() { this.request.setStream(true); return this; } - public OllamaChatRequestBuilder withKeepAlive(String keepAlive){ + public OllamaChatRequestBuilder withKeepAlive(String keepAlive) { this.request.setKeepAlive(keepAlive); return this; }