|
|
|
|
@@ -5,7 +5,6 @@ import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
|
import io.github.amithkoujalgi.ollama4j.core.OllamaAPI;
|
|
|
|
|
import io.github.amithkoujalgi.ollama4j.core.exceptions.OllamaBaseException;
|
|
|
|
|
import io.github.amithkoujalgi.ollama4j.core.models.OllamaResult;
|
|
|
|
|
import io.github.amithkoujalgi.ollama4j.core.types.OllamaModelType;
|
|
|
|
|
import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
@@ -16,26 +15,14 @@ import java.net.http.HttpConnectTimeoutException;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.util.Properties;
|
|
|
|
|
import lombok.Data;
|
|
|
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
|
|
|
import org.junit.jupiter.api.Order;
|
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
|
|
|
|
|
|
class TestRealAPIs {
|
|
|
|
|
OllamaAPI ollamaAPI;
|
|
|
|
|
|
|
|
|
|
private Properties loadProperties() {
|
|
|
|
|
Properties properties = new Properties();
|
|
|
|
|
try (InputStream input =
|
|
|
|
|
getClass().getClassLoader().getResourceAsStream("test-config.properties")) {
|
|
|
|
|
if (input == null) {
|
|
|
|
|
throw new RuntimeException("Sorry, unable to find test-config.properties");
|
|
|
|
|
}
|
|
|
|
|
properties.load(input);
|
|
|
|
|
return properties;
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
throw new RuntimeException("Error loading properties", e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Config config;
|
|
|
|
|
|
|
|
|
|
private File getImageFileFromClasspath(String fileName) {
|
|
|
|
|
ClassLoader classLoader = getClass().getClassLoader();
|
|
|
|
|
@@ -44,9 +31,9 @@ class TestRealAPIs {
|
|
|
|
|
|
|
|
|
|
@BeforeEach
|
|
|
|
|
void setUp() {
|
|
|
|
|
Properties properties = loadProperties();
|
|
|
|
|
ollamaAPI = new OllamaAPI(properties.getProperty("ollama.api.url"));
|
|
|
|
|
ollamaAPI.setRequestTimeoutSeconds(20);
|
|
|
|
|
config = new Config();
|
|
|
|
|
ollamaAPI = new OllamaAPI(config.getOllamaURL());
|
|
|
|
|
ollamaAPI.setRequestTimeoutSeconds(config.getRequestTimeoutSeconds());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
@@ -85,10 +72,10 @@ class TestRealAPIs {
|
|
|
|
|
void testPullModel() {
|
|
|
|
|
testEndpointReachability();
|
|
|
|
|
try {
|
|
|
|
|
ollamaAPI.pullModel(OllamaModelType.LLAMA2);
|
|
|
|
|
ollamaAPI.pullModel(config.getModel());
|
|
|
|
|
boolean found =
|
|
|
|
|
ollamaAPI.listModels().stream()
|
|
|
|
|
.anyMatch(model -> model.getModelName().equals(OllamaModelType.LLAMA2));
|
|
|
|
|
.anyMatch(model -> model.getModel().equalsIgnoreCase(config.getModel()));
|
|
|
|
|
assertTrue(found);
|
|
|
|
|
} catch (IOException | OllamaBaseException | InterruptedException | URISyntaxException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
@@ -102,7 +89,7 @@ class TestRealAPIs {
|
|
|
|
|
try {
|
|
|
|
|
OllamaResult result =
|
|
|
|
|
ollamaAPI.generate(
|
|
|
|
|
OllamaModelType.LLAMA2,
|
|
|
|
|
config.getModel(),
|
|
|
|
|
"What is the capital of France? And what's France's connection with Mona Lisa?",
|
|
|
|
|
new OptionsBuilder().build());
|
|
|
|
|
assertNotNull(result);
|
|
|
|
|
@@ -120,7 +107,7 @@ class TestRealAPIs {
|
|
|
|
|
try {
|
|
|
|
|
OllamaResult result =
|
|
|
|
|
ollamaAPI.generate(
|
|
|
|
|
OllamaModelType.LLAMA2,
|
|
|
|
|
config.getModel(),
|
|
|
|
|
"What is the capital of France? And what's France's connection with Mona Lisa?",
|
|
|
|
|
new OptionsBuilder().setTemperature(0.9f).build());
|
|
|
|
|
assertNotNull(result);
|
|
|
|
|
@@ -139,7 +126,7 @@ class TestRealAPIs {
|
|
|
|
|
try {
|
|
|
|
|
OllamaResult result =
|
|
|
|
|
ollamaAPI.generateWithImageFiles(
|
|
|
|
|
OllamaModelType.LLAVA,
|
|
|
|
|
config.getImageModel(),
|
|
|
|
|
"What is in this image?",
|
|
|
|
|
List.of(imageFile),
|
|
|
|
|
new OptionsBuilder().build());
|
|
|
|
|
@@ -158,7 +145,7 @@ class TestRealAPIs {
|
|
|
|
|
try {
|
|
|
|
|
OllamaResult result =
|
|
|
|
|
ollamaAPI.generateWithImageURLs(
|
|
|
|
|
OllamaModelType.LLAVA,
|
|
|
|
|
config.getImageModel(),
|
|
|
|
|
"What is in this image?",
|
|
|
|
|
List.of(
|
|
|
|
|
"https://t3.ftcdn.net/jpg/02/96/63/80/360_F_296638053_0gUVA4WVBKceGsIr7LNqRWSnkusi07dq.jpg"),
|
|
|
|
|
@@ -171,3 +158,29 @@ class TestRealAPIs {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Data
|
|
|
|
|
class Config {
|
|
|
|
|
private String ollamaURL;
|
|
|
|
|
private String model;
|
|
|
|
|
private String imageModel;
|
|
|
|
|
private int requestTimeoutSeconds;
|
|
|
|
|
|
|
|
|
|
public Config() {
|
|
|
|
|
Properties properties = new Properties();
|
|
|
|
|
try (InputStream input =
|
|
|
|
|
getClass().getClassLoader().getResourceAsStream("test-config.properties")) {
|
|
|
|
|
if (input == null) {
|
|
|
|
|
throw new RuntimeException("Sorry, unable to find test-config.properties");
|
|
|
|
|
}
|
|
|
|
|
properties.load(input);
|
|
|
|
|
this.ollamaURL = properties.getProperty("ollama.url");
|
|
|
|
|
this.model = properties.getProperty("ollama.model");
|
|
|
|
|
this.imageModel = properties.getProperty("ollama.model.image");
|
|
|
|
|
this.requestTimeoutSeconds =
|
|
|
|
|
Integer.parseInt(properties.getProperty("ollama.request-timeout-seconds"));
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
throw new RuntimeException("Error loading properties", e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|