mirror of
https://github.com/amithkoujalgi/ollama4j.git
synced 2025-05-15 20:07:10 +02:00
Adds model for Chat Requests to Ollama-API
This commit is contained in:
parent
3469bf314b
commit
f8cd7bc013
@ -0,0 +1,40 @@
|
|||||||
|
package io.github.amithkoujalgi.ollama4j.core.models.chat;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import static io.github.amithkoujalgi.ollama4j.core.utils.Utils.getObjectMapper;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NonNull;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines a single Message to be used inside a chat request against the ollama /api/chat endpoint.
|
||||||
|
*
|
||||||
|
* @see https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-chat-completion
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class OllamaChatMessage {
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private OllamaChatMessageRole role;
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
private List<File> images;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
try {
|
||||||
|
return getObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package io.github.amithkoujalgi.ollama4j.core.models.chat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the possible Chat Message roles.
|
||||||
|
*/
|
||||||
|
public enum OllamaChatMessageRole {
|
||||||
|
SYSTEM("system"),
|
||||||
|
USER("user"),
|
||||||
|
ASSISTANT("assisstant");
|
||||||
|
|
||||||
|
private String roleName;
|
||||||
|
|
||||||
|
private OllamaChatMessageRole(String roleName){
|
||||||
|
this.roleName = roleName;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
package io.github.amithkoujalgi.ollama4j.core.models.chat;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.utils.Options;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper class for creating {@link OllamaChatRequestModel} objects using the builder-pattern.
|
||||||
|
*/
|
||||||
|
public class OllamaChatRequestBuilder {
|
||||||
|
|
||||||
|
private OllamaChatRequestBuilder(String model, List<OllamaChatMessage> messages){
|
||||||
|
request = new OllamaChatRequestModel(model, messages);
|
||||||
|
}
|
||||||
|
|
||||||
|
private OllamaChatRequestModel request;
|
||||||
|
|
||||||
|
public static OllamaChatRequestBuilder getInstance(String model){
|
||||||
|
return new OllamaChatRequestBuilder(model, new ArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
public OllamaChatRequestModel build(){
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OllamaChatRequestBuilder withMessage(OllamaChatMessageRole role, String content, File... images){
|
||||||
|
List<OllamaChatMessage> messages = this.request.getMessages();
|
||||||
|
messages.add(new OllamaChatMessage(role,content,List.of(images)));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OllamaChatRequestBuilder withMessages(List<OllamaChatMessage> messages){
|
||||||
|
this.request.setMessages(messages);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OllamaChatRequestBuilder withOptions(Options options){
|
||||||
|
this.request.setOptions(options);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OllamaChatRequestBuilder withFormat(String format){
|
||||||
|
this.request.setFormat(format);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OllamaChatRequestBuilder withTemplate(String template){
|
||||||
|
this.request.setTemplate(template);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OllamaChatRequestBuilder withStreaming(){
|
||||||
|
this.request.setStream(true);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OllamaChatRequestBuilder withKeepAlive(String keepAlive){
|
||||||
|
this.request.setKeepAlive(keepAlive);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
package io.github.amithkoujalgi.ollama4j.core.models.chat;
|
||||||
|
|
||||||
|
import java.net.http.HttpRequest;
|
||||||
|
import java.net.http.HttpRequest.BodyPublisher;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.utils.OllamaRequestBody;
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.utils.Options;
|
||||||
|
import io.github.amithkoujalgi.ollama4j.core.utils.Utils;
|
||||||
|
|
||||||
|
import static io.github.amithkoujalgi.ollama4j.core.utils.Utils.getObjectMapper;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NonNull;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines a Request to use against the ollama /api/chat endpoint.
|
||||||
|
*
|
||||||
|
* @see https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-chat-completion
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class OllamaChatRequestModel implements OllamaRequestBody{
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private String model;
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private List<OllamaChatMessage> messages;
|
||||||
|
|
||||||
|
private String format;
|
||||||
|
private Options options;
|
||||||
|
private String template;
|
||||||
|
private boolean stream;
|
||||||
|
private String keepAlive;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
try {
|
||||||
|
return getObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BodyPublisher getBodyPublisher() {
|
||||||
|
try {
|
||||||
|
return HttpRequest.BodyPublishers.ofString(
|
||||||
|
Utils.getObjectMapper().writeValueAsString(this));
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new IllegalArgumentException("Request not Body convertible.",e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package io.github.amithkoujalgi.ollama4j.core.utils;
|
||||||
|
|
||||||
|
import java.net.http.HttpRequest.BodyPublisher;
|
||||||
|
import java.net.http.HttpRequest.BodyPublishers;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface to represent a OllamaRequest as HTTP-Request Body via {@link BodyPublishers}.
|
||||||
|
*/
|
||||||
|
public interface OllamaRequestBody {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transforms the OllamaRequest Object to a JSON Object via Jackson.
|
||||||
|
*
|
||||||
|
* @return JSON representation of a OllamaRequest
|
||||||
|
*/
|
||||||
|
default BodyPublisher getBodyPublisher(){
|
||||||
|
try {
|
||||||
|
return BodyPublishers.ofString(
|
||||||
|
Utils.getObjectMapper().writeValueAsString(this));
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new IllegalArgumentException("Request not Body convertible.",e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user