6 releases
0.1.8 | Mar 28, 2024 |
---|---|
0.1.6 | Mar 28, 2024 |
#826 in Database interfaces
23KB
420 lines
Chroma Rust Library
This is a Rust library for interacting with the ChromaDB vector database. It's intended for learning and educational purposes. For a more advanced library, please check out chromadb.
The asynchronous example uses Tokio crate.
1. Running the Backend
Here's how to run the ChromaDB backend using Docker:
default configuration:
docker pull chromadb/chroma
docker run -p 8000:8000 chromadb/chroma
with auth using token & persistant storage:
docker pull chromadb/chroma
docker run \
-p 8000:8000 \
-e chroma_server_auth_credentials_provider="chromadb.auth.token.tokenconfigserverauthcredentialsprovider" \
-e chroma_server_auth_provider="chromadb.auth.token.tokenauthserverprovider" \
-e chroma_server_auth_token_transport_header="x_chroma_token" \
-e chroma_server_auth_credentials="pilou2024" \
-v /path/to/persistent/storage/:/chroma/chroma \
chromadb/chroma
2. Default Client
Here's a basic example of how to create a default client:
use chromadb_rs::client::{ChromaClient, ChromaClientParams};
let client = ChromaClient::new(ChromaClientParams::default());
3. Advanced Client
For more advanced usage, you can create a client with custom parameters:
let mut hmap = HeaderMap::new();
hmap.insert("X-Chroma-Token", "test-token".parse().unwrap());
let settings = Settings {
tenant: "my-tenant".to_string(),
database: "my-database".to_string(),
}
let client = ChromaClient::new(ChromaClientParams {
host: "localhost".to_string(),
port: "8000".to_string(),
ssl: false,
headers: Some(hmap),
settings: Some(settings), // Some(Settings::default()) for default settings
});
4. Chroma client methods
- Heartbeat:
let hb = client.heartbeat().await?;
- Get all collections:
let collections = client.list_collections().await?;
- Create a collection without metadata:
let new_collection = client.create_collection("test-name", None).await?;
- Create a collection with metadata:
let mut metadata = HashMap::new();
metadata.insert("key1", "value1");
metadata.insert("key2", "value2");
let new_collection = client
.create_collection("test-name", Some(metadata)).await?;
- Create a collection using get or create:
let new_collection = client.get_or_create_collection("test-name", None).await?;
- Get a collection:
let collection = client.get_collection("test-name").await?;
- Delete a collection:
let deleted_collection = client.delete_collection("test-name").await?;
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
License
Dependencies
~7–18MB
~234K SLoC