diff --git a/src/main/java/io/endee/client/Collection.java b/src/main/java/io/endee/client/Collection.java index a0651a2..a9aef00 100644 --- a/src/main/java/io/endee/client/Collection.java +++ b/src/main/java/io/endee/client/Collection.java @@ -67,8 +67,7 @@ private Map> fieldMap() { Map> idx = new LinkedHashMap<>(); for (Map f : fields) { @SuppressWarnings("unchecked") - Map params = - (Map) f.getOrDefault("params", Map.of()); + Map params = (Map) f.getOrDefault("params", Map.of()); Map entry = new HashMap<>(); entry.put("type", f.getOrDefault("type", "vector")); entry.put("space_type", params.getOrDefault("space_type", "cosine")); @@ -95,8 +94,7 @@ public Map upsert(List objects) { "Cannot upsert more than " + MAX_BATCH_SIZE + " objects at a time"); } - List ids = - objects.stream().map(ObjectItem::getId).collect(Collectors.toList()); + List ids = objects.stream().map(ObjectItem::getId).collect(Collectors.toList()); ValidationUtils.validateObjectIds(ids); Map> fMap = fieldMap(); @@ -125,7 +123,10 @@ public Map upsert(List objects) { String ftype = (String) cfg.get("type"); String space = (String) cfg.getOrDefault("space_type", "cosine"); - int dim = cfg.get("dimension") instanceof Number ? ((Number) cfg.get("dimension")).intValue() : 0; + int dim = + cfg.get("dimension") instanceof Number + ? ((Number) cfg.get("dimension")).intValue() + : 0; if ("vector".equals(ftype)) { double[] vec = (double[]) fdata; @@ -151,10 +152,7 @@ public Map upsert(List objects) { validateVectorValues(vecs[i], item.getId()); if (dim > 0 && vecs[i].length != dim) { throw new IllegalArgumentException( - "Field '" - + fname - + "': every multi_vector must have dimension " - + dim); + "Field '" + fname + "': every multi_vector must have dimension " + dim); } normalizedVecs[i] = normalizeDense(vecs[i], space); if ("cosine".equals(space)) { @@ -187,8 +185,7 @@ public Map upsert(List objects) { byte[] payload = MessagePackUtils.packObjects(wireObjects); try { - HttpRequest request = - buildPostMsgpackRequest("/collection/" + name + "/objects", payload); + HttpRequest request = buildPostMsgpackRequest("/collection/" + name + "/objects", payload); HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); @@ -379,14 +376,12 @@ public Map> search( /** Convenience overload with defaults: efSearch=128, no filter tuning. */ public Map> search( - Map> queryFields, - List> filter) { + Map> queryFields, List> filter) { return search(queryFields, filter, 128, null, null); } /** Convenience overload: no filter. */ - public Map> search( - Map> queryFields) { + public Map> search(Map> queryFields) { return search(queryFields, null, 128, null, null); } @@ -460,8 +455,7 @@ public List getObjects(List ids) { if (sparsesRaw != null) { for (Map.Entry se : sparsesRaw.entrySet()) { sparses.put( - se.getKey(), - new SparseData((int[]) se.getValue()[0], (double[]) se.getValue()[1])); + se.getKey(), new SparseData((int[]) se.getValue()[0], (double[]) se.getValue()[1])); } } info.setSparses(sparses); @@ -502,8 +496,7 @@ public List getObjects(List ids) { /** Deletes a single object by ID. */ public Map deleteObject(String id) { try { - HttpRequest request = - buildDeleteRequest("/collection/" + name + "/objects/" + id); + HttpRequest request = buildDeleteRequest("/collection/" + name + "/objects/" + id); HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); @@ -531,8 +524,7 @@ public Map deleteByFilter(List> filter) { try { String jsonBody = JsonUtils.toJson(Map.of("filter", filter)); - HttpRequest request = - buildDeleteJsonRequest("/collection/" + name + "/objects", jsonBody); + HttpRequest request = buildDeleteJsonRequest("/collection/" + name + "/objects", jsonBody); HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); @@ -569,8 +561,7 @@ public Map updateFilters(List updates) { try { String jsonBody = JsonUtils.toJson(Map.of("updates", payload)); - HttpRequest request = - buildPostJsonRequest("/collection/" + name + "/filters", jsonBody); + HttpRequest request = buildPostJsonRequest("/collection/" + name + "/filters", jsonBody); HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); @@ -685,8 +676,7 @@ public Map rebuildStatus() { /** Defragments the collection's storage in place. */ public Map shrink() { try { - HttpRequest request = - buildPostJsonRequest("/collection/" + name + "/shrink", "{}"); + HttpRequest request = buildPostJsonRequest("/collection/" + name + "/shrink", "{}"); HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); @@ -713,8 +703,7 @@ public Map createBackup(String backupName) { try { String jsonBody = JsonUtils.toJson(Map.of("name", backupName)); - HttpRequest request = - buildPostJsonRequest("/collection/" + name + "/backup", jsonBody); + HttpRequest request = buildPostJsonRequest("/collection/" + name + "/backup", jsonBody); HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); @@ -815,10 +804,7 @@ private HttpRequest buildPostMsgpackRequest(String path, byte[] body) { private HttpRequest buildDeleteRequest(String path) { HttpRequest.Builder builder = - HttpRequest.newBuilder() - .uri(URI.create(baseUrl + path)) - .timeout(DEFAULT_TIMEOUT) - .DELETE(); + HttpRequest.newBuilder().uri(URI.create(baseUrl + path)).timeout(DEFAULT_TIMEOUT).DELETE(); if (token != null && !token.isBlank()) { builder.header("Authorization", token); diff --git a/src/main/java/io/endee/client/Endee.java b/src/main/java/io/endee/client/Endee.java index 9a78ba6..33a3eb2 100644 --- a/src/main/java/io/endee/client/Endee.java +++ b/src/main/java/io/endee/client/Endee.java @@ -40,8 +40,7 @@ public class Endee { private static final Logger logger = LoggerFactory.getLogger(Endee.class); private static final Duration DEFAULT_TIMEOUT = Duration.ofSeconds(30); - private static final Set VALID_DB_TYPES = - Set.of("starter", "pro", "scale", "enterprise"); + private static final Set VALID_DB_TYPES = Set.of("starter", "pro", "scale", "enterprise"); private static final Set VALID_TOKEN_TYPES = Set.of("rw", "r"); private String token; @@ -247,8 +246,7 @@ public String createToken(String dbName, String name) { @SuppressWarnings("unchecked") public List> listTokens(String dbName) { requireNonEmpty(dbName, "db_name"); - Map result = - call("GET", "/admin/dbs/" + dbName + "/tokens", null, Set.of(200)); + Map result = call("GET", "/admin/dbs/" + dbName + "/tokens", null, Set.of(200)); Object t = result.get("tokens"); return t instanceof List ? (List>) t : List.of(); } @@ -350,21 +348,23 @@ public String downloadBackup(String backupName, String destPath, String dbName) requireNonEmpty(backupName, "backup_name"); requireNonEmpty(destPath, "dest_path"); - StringBuilder url = new StringBuilder(baseUrl) - .append("/backup/") - .append(backupName) - .append("/download?token=") - .append(URLEncoder.encode(token != null ? token : "", StandardCharsets.UTF_8)); + StringBuilder url = + new StringBuilder(baseUrl) + .append("/backup/") + .append(backupName) + .append("/download?token=") + .append(URLEncoder.encode(token != null ? token : "", StandardCharsets.UTF_8)); if (dbName != null && !dbName.isEmpty()) { url.append("&db=").append(URLEncoder.encode(dbName, StandardCharsets.UTF_8)); } try { - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(url.toString())) - .timeout(DEFAULT_TIMEOUT) - .GET() - .build(); + HttpRequest request = + HttpRequest.newBuilder() + .uri(URI.create(url.toString())) + .timeout(DEFAULT_TIMEOUT) + .GET() + .build(); HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofByteArray()); if (response.statusCode() != 200) { @@ -406,11 +406,12 @@ public Map uploadBackup(String filePath) { byte[] multipartBody = buildMultipartBody(boundary, "backup", fileName, fileBytes); - HttpRequest.Builder builder = HttpRequest.newBuilder() - .uri(URI.create(baseUrl + "/backup/upload")) - .timeout(DEFAULT_TIMEOUT) - .header("Content-Type", "multipart/form-data; boundary=" + boundary) - .POST(HttpRequest.BodyPublishers.ofByteArray(multipartBody)); + HttpRequest.Builder builder = + HttpRequest.newBuilder() + .uri(URI.create(baseUrl + "/backup/upload")) + .timeout(DEFAULT_TIMEOUT) + .header("Content-Type", "multipart/form-data; boundary=" + boundary) + .POST(HttpRequest.BodyPublishers.ofByteArray(multipartBody)); if (token != null && !token.isEmpty()) { builder.header("Authorization", token); @@ -443,8 +444,14 @@ private static byte[] buildMultipartBody( String CRLF = "\r\n"; var baos = new java.io.ByteArrayOutputStream(); baos.write(("--" + boundary + CRLF).getBytes(StandardCharsets.UTF_8)); - baos.write(("Content-Disposition: form-data; name=\"" + fieldName + "\"; filename=\"" - + fileName + "\"" + CRLF).getBytes(StandardCharsets.UTF_8)); + baos.write( + ("Content-Disposition: form-data; name=\"" + + fieldName + + "\"; filename=\"" + + fileName + + "\"" + + CRLF) + .getBytes(StandardCharsets.UTF_8)); baos.write(("Content-Type: application/x-tar" + CRLF).getBytes(StandardCharsets.UTF_8)); baos.write(CRLF.getBytes(StandardCharsets.UTF_8)); baos.write(fileBytes); @@ -484,9 +491,7 @@ private Map call( private HttpRequest buildRequest(String method, String path, Map json) { HttpRequest.Builder builder = - HttpRequest.newBuilder() - .uri(URI.create(baseUrl + path)) - .timeout(DEFAULT_TIMEOUT); + HttpRequest.newBuilder().uri(URI.create(baseUrl + path)).timeout(DEFAULT_TIMEOUT); if (token != null && !token.isEmpty()) { builder.header("Authorization", token); diff --git a/src/main/java/io/endee/client/Reranker.java b/src/main/java/io/endee/client/Reranker.java index fc32c03..e2836b9 100644 --- a/src/main/java/io/endee/client/Reranker.java +++ b/src/main/java/io/endee/client/Reranker.java @@ -107,8 +107,7 @@ public static List rerank( } /** Convenience: rerank with uniform weights. */ - public static List rerank( - Map> searchResults, int limit) { + public static List rerank(Map> searchResults, int limit) { return rerank(searchResults, limit, null, DEFAULT_RRF_K); } } diff --git a/src/main/java/io/endee/client/types/SearchHit.java b/src/main/java/io/endee/client/types/SearchHit.java index 2d68179..f05c649 100644 --- a/src/main/java/io/endee/client/types/SearchHit.java +++ b/src/main/java/io/endee/client/types/SearchHit.java @@ -11,7 +11,8 @@ public class SearchHit { public SearchHit() {} - public SearchHit(String id, double similarity, Map meta, Map filter) { + public SearchHit( + String id, double similarity, Map meta, Map filter) { this.id = id; this.similarity = similarity; this.meta = meta; diff --git a/src/main/java/io/endee/client/util/MessagePackUtils.java b/src/main/java/io/endee/client/util/MessagePackUtils.java index f942b20..1869131 100644 --- a/src/main/java/io/endee/client/util/MessagePackUtils.java +++ b/src/main/java/io/endee/client/util/MessagePackUtils.java @@ -7,7 +7,6 @@ import org.msgpack.core.MessagePack; import org.msgpack.core.MessageUnpacker; import org.msgpack.value.Value; -import org.msgpack.value.ValueType; /** * MessagePack serialization utilities for the v2 wire format.