Compare commits

...

7 Commits

Author SHA1 Message Date
893e5dd763 Add gitea release workflow 2024-08-21 21:28:26 +02:00
c520604f4b Add gitea package repository 2024-08-21 18:12:48 +02:00
a85c23d64a Stream only the new tokens, not the entire message 2024-08-21 18:12:22 +02:00
d32a8b7d88 Do not append to history 2024-08-21 17:53:53 +02:00
Amith Koujalgi
992625cf86 Merge pull request #63 from peaster/gradle-dependency-fix
Change Gradle dependency example to use correct declaration
2024-08-10 10:20:09 +05:30
peaster
bbebd26d07 correct Gradle dependency example to use correct declaration 2024-08-09 16:24:43 -04:00
Amith Koujalgi
3aa0fc77cb Updated withMessages method of OllamaChatRequestBuilder to reset the messages 2024-08-09 01:39:21 +05:30
7 changed files with 103 additions and 45 deletions

View File

@@ -0,0 +1,32 @@
name: Build and Publish
on: push
jobs:
build:
runs-on: standard-22.04
steps:
- name: Check out
uses: actions/checkout@v4
- name: Set Up Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
#cache: 'maven'
#server-id: 'gitea'
- name: Set up Maven
uses: stCarolas/setup-maven@v5
with:
maven-version: 3.8.2
- run: cat /root/.m2/toolchains.xml
- run: cat /root/.m2/settings.xml
- name: Build
run: mvn -B package --file pom.xml
- name: Publish
run: mvn deploy

View File

@@ -221,7 +221,7 @@ In your Maven project, add this dependency:
```groovy
dependencies {
implementation 'com.github.ollama4j:ollama4j:1.0.79'
implementation 'io.github.ollama4j:ollama4j:1.0.79'
}
```

View File

@@ -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("<your-model>");
OllamaChatRequest requestModel = builder.withMessage(OllamaChatMessageRole.USER, "<your-first-message>").build();
OllamaChatResult initialChatResult = ollamaAPI.chat(requestModel);
System.out.println(initialChatResult.getResponse());
List<OllamaChatMessage> history = initialChatResult.getChatHistory();
while (true) {
OllamaChatResult chatResult = ollamaAPI.chat(builder.withMessages(history).withMessage(OllamaChatMessageRole.USER, "<your-new-message").build());
System.out.println(chatResult.getResponse());
history = chatResult.getChatHistory();
}
}
}
```
## Create a conversation where the answer is streamed
```java

16
pom.xml
View File

@@ -129,6 +129,13 @@
</plugins>
</build>
<repositories>
<repository>
<id>gitea</id>
<url>https://gitea.seeseepuff.be/api/packages/seeseemelk/maven</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
@@ -178,8 +185,13 @@
</dependencies>
<distributionManagement>
<snapshotRepository>
<id>gitea</id>
<url>https://gitea.seeseepuff.be/api/packages/seeseemelk/maven</url>
</snapshotRepository>
<repository>
<id>mvn-repo-id</id>
<id>gitea</id>
<url>https://gitea.seeseepuff.be/api/packages/seeseemelk/maven</url>
</repository>
</distributionManagement>
@@ -319,4 +331,4 @@
</profile>
</profiles>
</project>
</project>

View File

@@ -1,5 +1,10 @@
package io.github.ollama4j.models.chat;
import io.github.ollama4j.utils.Options;
import io.github.ollama4j.utils.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
@@ -8,12 +13,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.github.ollama4j.utils.Options;
import io.github.ollama4j.utils.Utils;
/**
* Helper class for creating {@link OllamaChatRequest} objects using the builder-pattern.
*/
@@ -21,88 +20,85 @@ public class OllamaChatRequestBuilder {
private static final Logger LOG = LoggerFactory.getLogger(OllamaChatRequestBuilder.class);
private OllamaChatRequestBuilder(String model, List<OllamaChatMessage> messages){
private OllamaChatRequestBuilder(String model, List<OllamaChatMessage> 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<File> images){
public OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, List<File> images) {
List<OllamaChatMessage> messages = this.request.getMessages();
List<byte[]> 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<OllamaChatMessage> messages = this.request.getMessages();
List<byte[]> 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<OllamaChatMessage> messages){
this.request.getMessages().addAll(messages);
return this;
public OllamaChatRequestBuilder withMessages(List<OllamaChatMessage> 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;
}

View File

@@ -16,16 +16,10 @@ public class OllamaChatResult extends OllamaResult{
List<OllamaChatMessage> chatHistory) {
super(response, responseTime, httpStatusCode);
this.chatHistory = chatHistory;
appendAnswerToChatHistory(response);
}
public List<OllamaChatMessage> getChatHistory() {
return chatHistory;
}
private void appendAnswerToChatHistory(String answer){
OllamaChatMessage assistantMessage = new OllamaChatMessage(OllamaChatMessageRole.ASSISTANT, answer);
this.chatHistory.add(assistantMessage);
}

View File

@@ -11,8 +11,6 @@ public class OllamaChatStreamObserver {
private List<OllamaChatResponseModel> responseParts = new ArrayList<>();
private String message = "";
public OllamaChatStreamObserver(OllamaStreamHandler streamHandler) {
this.streamHandler = streamHandler;
}
@@ -23,8 +21,7 @@ public class OllamaChatStreamObserver {
}
protected void handleCurrentResponsePart(OllamaChatResponseModel currentResponsePart) {
message = message + currentResponsePart.getMessage().getContent();
streamHandler.accept(message);
streamHandler.accept(currentResponsePart.getMessage().getContent());
}