- Added verbose param to OllamaAPI

- Setup logback logging
- Updated readme
This commit is contained in:
Amith Koujalgi 2023-11-09 00:26:03 +05:30
parent 98a98d3276
commit d50e30f147
6 changed files with 149 additions and 19 deletions

1
.gitignore vendored
View File

@ -37,3 +37,4 @@ build/
### Mac OS ###
.DS_Store
/.idea/
/src/main/java/io/github/amithkoujalgi/ollama4j/core/localtests/

104
README.md

File diff suppressed because one or more lines are too long

View File

@ -106,6 +106,11 @@
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.11</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>

View File

@ -13,6 +13,8 @@ import org.apache.hc.core5.http.HttpEntity;
import org.apache.hc.core5.http.ParseException;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.io.entity.StringEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.DataOutputStream;
@ -28,9 +30,9 @@ import java.util.stream.Collectors;
*/
@SuppressWarnings({"DuplicatedCode", "ExtractMethodRecommender"})
public class OllamaAPI {
private static final Logger logger = LoggerFactory.getLogger(OllamaAPI.class);
private final String host;
private boolean verbose = false;
/**
* Instantiates the Ollama API.
@ -45,6 +47,14 @@ public class OllamaAPI {
}
}
/**
* Set/unset logging of responses
* @param verbose - true/false
*/
public void setVerbose(boolean verbose) {
this.verbose = verbose;
}
/**
* List available models from Ollama server.
*
@ -77,15 +87,15 @@ public class OllamaAPI {
/**
* Gets model details from the Ollama server.
*
* @param model the model
* @param modelName the model
* @return the model details
* @throws IOException
* @throws OllamaBaseException
* @throws ParseException
*/
public ModelDetail getModelDetails(Model model) throws IOException, OllamaBaseException, ParseException {
public ModelDetail getModelDetails(String modelName) throws IOException, OllamaBaseException, ParseException {
String url = this.host + "/api/show";
String jsonData = String.format("{\"name\": \"%s\"}", model.getName());
String jsonData = String.format("{\"name\": \"%s\"}", modelName);
final HttpPost httpPost = new HttpPost(url);
final StringEntity entity = new StringEntity(jsonData);
httpPost.setEntity(entity);
@ -143,15 +153,15 @@ public class OllamaAPI {
* Create a custom model from a model file.
* Read more about custom model file creation <a href="https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md">here</a>.
*
* @param name the name of the custom model to be created
* @param modelName the name of the custom model to be created.
* @param modelFilePath the path to model file that exists on the Ollama server.
* @throws IOException
* @throws ParseException
* @throws OllamaBaseException
*/
public void createModel(String name, String modelFilePath) throws IOException, ParseException, OllamaBaseException {
public void createModel(String modelName, String modelFilePath) throws IOException, ParseException, OllamaBaseException {
String url = this.host + "/api/create";
String jsonData = String.format("{\"name\": \"%s\", \"path\": \"%s\"}", name, modelFilePath);
String jsonData = String.format("{\"name\": \"%s\", \"path\": \"%s\"}", modelName, modelFilePath);
final HttpPost httpPost = new HttpPost(url);
final StringEntity entity = new StringEntity(jsonData);
httpPost.setEntity(entity);
@ -163,6 +173,13 @@ public class OllamaAPI {
String responseString = "";
if (responseEntity != null) {
responseString = EntityUtils.toString(responseEntity, "UTF-8");
// FIXME: Ollama API returns HTTP status code 200 for model creation failure cases. Correct this if the issue is fixed in the Ollama API server.
if (responseString.contains("error")) {
throw new OllamaBaseException(responseString);
}
if (verbose) {
logger.info(responseString);
}
}
if (statusCode != 200) {
throw new OllamaBaseException(statusCode + " - " + responseString);
@ -193,6 +210,9 @@ public class OllamaAPI {
String responseString = "";
if (responseEntity != null) {
responseString = EntityUtils.toString(responseEntity, "UTF-8");
if (verbose) {
logger.info(responseString);
}
}
if (statusCode == 404 && responseString.contains("model") && responseString.contains("not found")) {
return;

View File

@ -1,5 +1,7 @@
package io.github.amithkoujalgi.ollama4j.core.models;
import com.google.gson.GsonBuilder;
public class ModelDetail {
private String license, modelfile, parameters, template;
@ -34,4 +36,9 @@ public class ModelDetail {
public void setTemplate(String template) {
this.template = template;
}
@Override
public String toString() {
return new GsonBuilder().setPrettyPrinting().create().toJson(this);
}
}

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT"/>
</root>
<logger name="org.apache" level="WARN"/>
<logger name="httpclient" level="WARN"/>
</configuration>