- removed returning JSON string from toString methods of POJOs

- moved the code to get the `ObjectMapper` instance to `Utils` so that any changes to ObjectMapper could be handled at one place.
- removed duplicate ObjectMapper instantiation code
This commit is contained in:
Amith Koujalgi 2023-11-13 00:47:47 +05:30
parent 0d6af4b4a5
commit d2f405dc64
5 changed files with 21 additions and 44 deletions

View File

@ -1,9 +1,8 @@
package io.github.amithkoujalgi.ollama4j.core; package io.github.amithkoujalgi.ollama4j.core;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.github.amithkoujalgi.ollama4j.core.exceptions.OllamaBaseException; import io.github.amithkoujalgi.ollama4j.core.exceptions.OllamaBaseException;
import io.github.amithkoujalgi.ollama4j.core.models.*; import io.github.amithkoujalgi.ollama4j.core.models.*;
import io.github.amithkoujalgi.ollama4j.core.utils.Utils;
import org.apache.hc.client5.http.classic.methods.HttpDelete; import org.apache.hc.client5.http.classic.methods.HttpDelete;
import org.apache.hc.client5.http.classic.methods.HttpGet; import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.classic.methods.HttpPost; import org.apache.hc.client5.http.classic.methods.HttpPost;
@ -37,9 +36,6 @@ public class OllamaAPI {
private final String host; private final String host;
private boolean verbose = false; private boolean verbose = false;
private final ObjectMapper objectMapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
/** /**
* Instantiates the Ollama API. * Instantiates the Ollama API.
* *
@ -82,7 +78,7 @@ public class OllamaAPI {
responseString = EntityUtils.toString(responseEntity, "UTF-8"); responseString = EntityUtils.toString(responseEntity, "UTF-8");
} }
if (statusCode == 200) { if (statusCode == 200) {
return objectMapper.readValue(responseString, ListModelsResponse.class).getModels(); return Utils.getObjectMapper().readValue(responseString, ListModelsResponse.class).getModels();
} else { } else {
throw new OllamaBaseException(statusCode + " - " + responseString); throw new OllamaBaseException(statusCode + " - " + responseString);
} }
@ -114,7 +110,7 @@ public class OllamaAPI {
responseString = EntityUtils.toString(responseEntity, "UTF-8"); responseString = EntityUtils.toString(responseEntity, "UTF-8");
} }
if (statusCode == 200) { if (statusCode == 200) {
return objectMapper.readValue(responseString, ModelDetail.class); return Utils.getObjectMapper().readValue(responseString, ModelDetail.class);
} else { } else {
throw new OllamaBaseException(statusCode + " - " + responseString); throw new OllamaBaseException(statusCode + " - " + responseString);
} }
@ -245,9 +241,9 @@ public class OllamaAPI {
con.setRequestMethod("POST"); con.setRequestMethod("POST");
con.setDoOutput(true); con.setDoOutput(true);
con.setRequestProperty("Content-Type", "application/json"); con.setRequestProperty("Content-Type", "application/json");
System.out.println(ollamaRequestModel.toString()); String jsonReq = Utils.getObjectMapper().writeValueAsString(ollamaRequestModel);
try (OutputStream out = con.getOutputStream()) { try (OutputStream out = con.getOutputStream()) {
out.write(ollamaRequestModel.toString().getBytes(StandardCharsets.UTF_8)); out.write(jsonReq.getBytes(StandardCharsets.UTF_8));
} }
int responseCode = con.getResponseCode(); int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) { if (responseCode == HttpURLConnection.HTTP_OK) {
@ -255,7 +251,7 @@ public class OllamaAPI {
String inputLine; String inputLine;
StringBuilder response = new StringBuilder(); StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) { while ((inputLine = in.readLine()) != null) {
OllamaResponseModel ollamaResponseModel = objectMapper.readValue(inputLine, OllamaResponseModel.class); OllamaResponseModel ollamaResponseModel = Utils.getObjectMapper().readValue(inputLine, OllamaResponseModel.class);
if (!ollamaResponseModel.getDone()) { if (!ollamaResponseModel.getDone()) {
response.append(ollamaResponseModel.getResponse()); response.append(ollamaResponseModel.getResponse());
} }
@ -284,8 +280,9 @@ public class OllamaAPI {
con.setRequestMethod("POST"); con.setRequestMethod("POST");
con.setDoOutput(true); con.setDoOutput(true);
con.setRequestProperty("Content-Type", "application/json"); con.setRequestProperty("Content-Type", "application/json");
String jsonReq = Utils.getObjectMapper().writeValueAsString(ollamaRequestModel);
try (OutputStream out = con.getOutputStream()) { try (OutputStream out = con.getOutputStream()) {
out.write(ollamaRequestModel.toString().getBytes(StandardCharsets.UTF_8)); out.write(jsonReq.getBytes(StandardCharsets.UTF_8));
} }
OllamaAsyncResultCallback ollamaAsyncResultCallback = new OllamaAsyncResultCallback(con); OllamaAsyncResultCallback ollamaAsyncResultCallback = new OllamaAsyncResultCallback(con);
ollamaAsyncResultCallback.start(); ollamaAsyncResultCallback.start();
@ -316,7 +313,7 @@ public class OllamaAPI {
String responseString = ""; String responseString = "";
if (responseEntity != null) { if (responseEntity != null) {
responseString = EntityUtils.toString(responseEntity, "UTF-8"); responseString = EntityUtils.toString(responseEntity, "UTF-8");
EmbeddingResponse embeddingResponse = objectMapper.readValue(responseString, EmbeddingResponse.class); EmbeddingResponse embeddingResponse = Utils.getObjectMapper().readValue(responseString, EmbeddingResponse.class);
return embeddingResponse.getEmbedding(); return embeddingResponse.getEmbedding();
} else { } else {
throw new OllamaBaseException(statusCode + " - " + responseString); throw new OllamaBaseException(statusCode + " - " + responseString);

View File

@ -1,8 +1,6 @@
package io.github.amithkoujalgi.ollama4j.core.models; package io.github.amithkoujalgi.ollama4j.core.models;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ModelDetail { public class ModelDetail {
private String license; private String license;
@ -41,16 +39,4 @@ public class ModelDetail {
public void setTemplate(String template) { public void setTemplate(String template) {
this.template = template; this.template = template;
} }
@Override
public String toString() {
try {
return new ObjectMapper()
.writer()
.withDefaultPrettyPrinter()
.writeValueAsString(this);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
} }

View File

@ -1,7 +1,7 @@
package io.github.amithkoujalgi.ollama4j.core.models; package io.github.amithkoujalgi.ollama4j.core.models;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.github.amithkoujalgi.ollama4j.core.exceptions.OllamaBaseException; import io.github.amithkoujalgi.ollama4j.core.exceptions.OllamaBaseException;
import io.github.amithkoujalgi.ollama4j.core.utils.Utils;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
@ -10,12 +10,12 @@ import java.net.HttpURLConnection;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Queue; import java.util.Queue;
@SuppressWarnings("DuplicatedCode") @SuppressWarnings("DuplicatedCode")
public class OllamaAsyncResultCallback extends Thread { public class OllamaAsyncResultCallback extends Thread {
private final HttpURLConnection connection; private final HttpURLConnection connection;
private String result; private String result;
private boolean isDone; private boolean isDone;
private final ObjectMapper objectMapper = new ObjectMapper();
private final Queue<String> queue = new LinkedList<>(); private final Queue<String> queue = new LinkedList<>();
public OllamaAsyncResultCallback(HttpURLConnection connection) { public OllamaAsyncResultCallback(HttpURLConnection connection) {
@ -35,7 +35,7 @@ public class OllamaAsyncResultCallback extends Thread {
String inputLine; String inputLine;
StringBuilder response = new StringBuilder(); StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) { while ((inputLine = in.readLine()) != null) {
OllamaResponseModel ollamaResponseModel = objectMapper.readValue(inputLine, OllamaResponseModel.class); OllamaResponseModel ollamaResponseModel = Utils.getObjectMapper().readValue(inputLine, OllamaResponseModel.class);
queue.add(ollamaResponseModel.getResponse()); queue.add(ollamaResponseModel.getResponse());
if (!ollamaResponseModel.getDone()) { if (!ollamaResponseModel.getDone()) {
response.append(ollamaResponseModel.getResponse()); response.append(ollamaResponseModel.getResponse());

View File

@ -1,9 +1,6 @@
package io.github.amithkoujalgi.ollama4j.core.models; package io.github.amithkoujalgi.ollama4j.core.models;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class OllamaRequestModel { public class OllamaRequestModel {
private String model; private String model;
private String prompt; private String prompt;
@ -28,16 +25,4 @@ public class OllamaRequestModel {
public void setPrompt(String prompt) { public void setPrompt(String prompt) {
this.prompt = prompt; this.prompt = prompt;
} }
@Override
public String toString() {
try {
return new ObjectMapper()
.writer()
.withDefaultPrettyPrinter()
.writeValueAsString(this);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
} }

View File

@ -0,0 +1,9 @@
package io.github.amithkoujalgi.ollama4j.core.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Utils {
public static ObjectMapper getObjectMapper() {
return new ObjectMapper();
}
}