Data Object Layer for ChromaDB
Project description
chromadol
Data Object Layer for ChromaDB
To install: pip install chromadol
Example usage
To make a ChromaClient
DOL, you can specify a chromadb
Client
, PersistentClient
(etc.)
instance, or specify a string (which will be interpreted as a path to a directory to
save the data to in a PersistentClient
instance).
>>> from chromadol import ChromaClient
>>> import tempfile, os
>>> with tempfile.TemporaryDirectory() as temp_dir:
... tempdir = os.path.join(temp_dir, "chromadol_test")
... os.makedirs(tempdir)
>>> client = ChromaClient(tempdir)
Removing all contents of client to be able to run a test on a clean slate
>>> for k in client:
... del client[k]
There's nothing yet:
>>> list(client)
[]
Now let's "get" a collection.
>>> collection = client['chromadol_test']
Note that just accessing the collection creates it (by default)
>>> list(client)
['chromadol_test']
Here's nothing in the collection yet:
>>> list(collection)
[]
So let's write something.
Note that chromadb
is designed to operate on multiple documents at once,
so the "chromadb-natural" way of specifying it's keys and contents (and any extras)
would be like this:
>>> collection[['piece', 'of']] = {
... 'documents': ['contents for piece', 'contents for of'],
... 'metadatas': [{'author': 'me'}, {'author': 'you'}],
... }
Now we have two documents in the collection:
>>> len(collection)
2
Note, though, that the order of the documents is not guaranteed.
>>> sorted(collection)
['of', 'piece']
>>> assert collection['piece'] == {
... 'ids': ['piece'],
... 'embeddings': None,
... 'metadatas': [{'author': 'me'}],
... 'documents': ['contents for piece'],
... 'uris': None,
... 'data': None
... }
>>> assert collection['of'] == {
... 'ids': ['of'],
... 'embeddings': None,
... 'metadatas': [{'author': 'you'}],
... 'documents': ['contents for of'],
... 'uris': None,
... 'data': None
... }
You can also read multiple documents at once. But note that the order of the documents is not guaranteed.
>>> collection[['piece', 'of']] == collection[['of', 'piece']]
True
You can read or write one document at a time too.
>>> collection['cake'] = {
... "documents": "contents for cake",
... }
>>> sorted(collection) # sorting because order is not guaranteed
['cake', 'of', 'piece']
>>> assert collection['cake'] == {
... 'ids': ['cake'],
... 'embeddings': None,
... 'metadatas': [None],
... 'documents': ['contents for cake'],
... 'uris': None,
... 'data': None,
... }
In fact, see that if you only want to specify the "documents" part of the information, you can just write a string instead of a dictionary:
>>> collection['cake'] = 'a different cake'
>>> assert collection['cake'] == {
... 'ids': ['cake'],
... 'embeddings': None,
... 'metadatas': [None],
... 'documents': ['a different cake'],
... 'uris': None,
... 'data': None,
... }
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file chromadol-0.1.2.tar.gz
.
File metadata
- Download URL: chromadol-0.1.2.tar.gz
- Upload date:
- Size: 7.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f18752ec7b6361f3d4c60a36c59b3c3d2ab9d252a7bfdc30697aaadb8e8fc7d6 |
|
MD5 | 059f2f7ec66572f44befb76883ac1801 |
|
BLAKE2b-256 | 25348a8a899de3e15439af66bad12abffbc48e013a766761eea3659c477756bd |
File details
Details for the file chromadol-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: chromadol-0.1.2-py3-none-any.whl
- Upload date:
- Size: 9.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 79360c6555e84ea70ad628f013375958435a440b6c9b30f5a6307bae416cb11b |
|
MD5 | 6d0d9f3f8435d99f30a29ae5710359e6 |
|
BLAKE2b-256 | 253d9e55f2ae6d20dd3562cb082431217df83557373c48dd54d17924490c9ab5 |