-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathClient.java
97 lines (84 loc) · 3.63 KB
/
Client.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package tech.amikos.chromadb;
import com.google.gson.internal.LinkedTreeMap;
import tech.amikos.chromadb.handler.ApiClient;
import tech.amikos.chromadb.handler.ApiException;
import tech.amikos.chromadb.handler.DefaultApi;
import tech.amikos.chromadb.model.CreateCollection;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* ChromaDB Client
*/
public class Client {
final ApiClient apiClient = new ApiClient();
private int timeout = 60;
DefaultApi api;
public Client(String basePath) {
apiClient.setBasePath(basePath);
api = new DefaultApi(apiClient);
apiClient.setHttpClient(apiClient.getHttpClient().newBuilder()
.readTimeout(this.timeout, java.util.concurrent.TimeUnit.SECONDS)
.writeTimeout(this.timeout, java.util.concurrent.TimeUnit.SECONDS)
.build());
api.getApiClient().setUserAgent("Chroma-JavaClient/0.1.x");
}
/**
* Set the timeout for the client
* @param timeout timeout in seconds
*/
public void setTimeout(int timeout) {
this.timeout = timeout;
apiClient.setHttpClient(apiClient.getHttpClient().newBuilder()
.readTimeout(this.timeout, java.util.concurrent.TimeUnit.SECONDS)
.writeTimeout(this.timeout, java.util.concurrent.TimeUnit.SECONDS)
.build());
}
public Collection getCollection(String collectionName, EmbeddingFunction embeddingFunction) throws ApiException {
return new Collection(api, collectionName, embeddingFunction).fetch();
}
public Map<String, BigDecimal> heartbeat() throws ApiException {
return api.heartbeat();
}
public Collection createCollection(String collectionName, Map<String, String> metadata, Boolean createOrGet, EmbeddingFunction embeddingFunction) throws ApiException {
CreateCollection req = new CreateCollection();
req.setName(collectionName);
Map<String, String> _metadata = metadata;
if (metadata == null || metadata.isEmpty() || !metadata.containsKey("embedding_function")) {
_metadata = new LinkedTreeMap<>();
_metadata.put("embedding_function", embeddingFunction.getClass().getName());
}
req.setMetadata(_metadata);
req.setGetOrCreate(createOrGet);
LinkedTreeMap resp = (LinkedTreeMap) api.createCollection(req);
return new Collection(api, (String) resp.get("name"), embeddingFunction).fetch();
}
public Collection deleteCollection(String collectionName) throws ApiException {
Collection collection = Collection.getInstance(api, collectionName);
api.deleteCollection(collectionName);
return collection;
}
public Collection upsert(String collectionName, EmbeddingFunction ef) throws ApiException {
Collection collection = getCollection(collectionName, ef);
// collection.upsert();
return collection;
}
public Boolean reset() throws ApiException {
return api.reset();
}
public List<Collection> listCollections() throws ApiException {
List<LinkedTreeMap> apiResponse = (List<LinkedTreeMap>) api.listCollections();
return apiResponse.stream().map((LinkedTreeMap m) -> {
try {
return getCollection((String) m.get("name"), null);
} catch (ApiException e) {
e.printStackTrace(); //this is not great as we're swallowing the exception
}
return null;
}).collect(Collectors.toList());
}
public String version() throws ApiException {
return api.version();
}
}