Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
573 commits
Select commit Hold shift + click to select a range
610e0eb
Move Chroma Cloud from the README to docs/chroma-cloud.md
Laurianti Oct 10, 2026
303cc17
Move search and hybrid search from the README to docs/search.md
Laurianti Oct 10, 2026
5c7e589
Move sparse vectors and schema from the README to docs/sparse-vectors…
Laurianti Oct 10, 2026
6045c95
Move the builds, trimming and NativeAOT from the README to docs/platf…
Laurianti Oct 10, 2026
20d1028
Move about this fork from the README to docs/about-this-fork.md
Laurianti Oct 10, 2026
3f8103b
Move the notes on the servers from the README to docs/COMPATIBILITY.md
Laurianti Oct 10, 2026
72bbd45
Move the tests from the README to CONTRIBUTING.md
Laurianti Oct 10, 2026
09ad618
Reduce the README to the introduction, the installation, an example a…
Laurianti Oct 10, 2026
f7a7b3f
Give the versions measured for the v1 API and the authentication of C…
Laurianti Oct 10, 2026
7a0c897
Give the versions of KD-12 measured: 1.5.0 to 1.5.9
Laurianti Oct 10, 2026
a372032
Say in KD-13 that the client sends no request for a limit of 0
Laurianti Oct 10, 2026
385f310
Say that the 0.x servers delete the stored document on a null documen…
Laurianti Oct 10, 2026
35e1b4b
Give the dates of the known defects up to 10 October, and say that KD…
Laurianti Oct 10, 2026
128d89a
Say that Space is L2 on Chroma 0.5.16 to 0.6.3, and null only on 1.0.…
Laurianti Oct 10, 2026
5773535
Link the measurements that the upsert strategies compare with, now in…
Laurianti Oct 10, 2026
06d0141
Merge pull request #122 from ChromaDotNet/server-limits
Laurianti Oct 10, 2026
2ae09a7
Document KD-52: on Chroma 1.5.9 a query while a record is deleted and…
Laurianti Oct 10, 2026
05f9dca
Say where KD-49 was verified: on Chroma 1.5.9 with this client and th…
Laurianti Oct 10, 2026
60c54fc
Document KD-53: a delete by ids answers the number of ids given as th…
Laurianti Oct 10, 2026
714d708
Document KD-54: on Chroma Cloud a filter with a number of the other t…
Laurianti Oct 10, 2026
3968fcb
Document KD-55: on Chroma Cloud a $contains filter longer than 130 ch…
Laurianti Oct 10, 2026
10ae450
Say where KD-48 was verified: on Chroma 1.0.0 and 1.0.5 with this cli…
Laurianti Oct 10, 2026
4ba02c1
Say where KD-50 was verified: on Chroma 1.0.0 and 1.0.5 with this cli…
Laurianti Oct 10, 2026
a310de5
Say where the lists in metadata were verified: rejected by Chroma 1.3…
Laurianti Oct 10, 2026
d0e7fab
Say where the deletion of a document by a null was verified on Chroma…
Laurianti Oct 10, 2026
d41be73
Say that a null value deletes a metadata key in an update or an upser…
Laurianti Oct 10, 2026
fc13c13
Say that a null value in the metadata of an add is rejected, verified…
Laurianti Oct 10, 2026
0a8bd29
Say that a record without metadata keys comes back with null metadata…
Laurianti Oct 10, 2026
5a1074a
Say that a number in the metadata keeps its type, verified with the t…
Laurianti Oct 10, 2026
e9392f5
Say that $not_contains matches the records without the key, verified …
Laurianti Oct 10, 2026
07629dd
Say that Chroma Cloud takes at most 32 metadata keys and counts a nul…
Laurianti Oct 10, 2026
9004a3d
Say that a list of values of different types in the metadata is rejec…
Laurianti Oct 10, 2026
a8589bc
Say that a query has no offset, checked in plain HTTP on Chroma 1.5.9…
Laurianti Oct 10, 2026
cb56055
Say that Chroma Cloud sends the space of a collection in the SPANN co…
Laurianti Oct 10, 2026
f31690a
Say that Chroma Cloud ignores the HNSW settings of a new collection, …
Laurianti Oct 10, 2026
5a07889
Say that Chroma rejects a float in the hnsw metadata of a new collect…
Laurianti Oct 10, 2026
64b97f6
Say that Chroma rejects HNSW and SPANN settings together, checked in …
Laurianti Oct 10, 2026
7552610
Say that a single Chroma server answers the SPANN settings of a chang…
Laurianti Oct 10, 2026
0c2b3b1
Say that only Chroma Cloud forks collections and reports the indexing…
Laurianti Oct 10, 2026
44d1133
Say what the identity of a key answers on Chroma Cloud and on a singl…
Laurianti Oct 10, 2026
f9af6c8
Say that the count of the index of Chroma Cloud lags behind a write, …
Laurianti Oct 10, 2026
70ee0b5
Say how Chroma Cloud answers reads and writes beyond 300 records, ver…
Laurianti Oct 10, 2026
2884183
Say where the limit of 300 query results of Chroma Cloud was verified…
Laurianti Oct 10, 2026
ec11510
Say where the Search API was verified: Chroma Cloud serves it and Chr…
Laurianti Oct 10, 2026
579ce2a
Say that only Chroma Cloud takes a sparse vector index, verified with…
Laurianti Oct 10, 2026
2631e2b
Say that Chroma Cloud rejects a source key without an embedding funct…
Laurianti Oct 10, 2026
ee49841
Say that Chroma rejects a configuration and a schema together, verifi…
Laurianti Oct 10, 2026
50d2054
Say that Chroma Cloud ignores the hnsw:space metadata next to SPANN s…
Laurianti Oct 10, 2026
a88891b
Say where the fixed SPANN settings of Chroma Cloud were verified: wit…
Laurianti Oct 10, 2026
fd2270a
Say that a BM25 search of Chroma Cloud ranks the records without the …
Laurianti Oct 10, 2026
c845c43
Say that an API key of Chroma Cloud gets 403 for a new tenant and a r…
Laurianti Oct 10, 2026
4ef3a8c
Say where KD-26 was verified: with this client and in plain HTTP, wit…
Laurianti Oct 10, 2026
34e75f6
Say where the update of a tenant was verified on Chroma 1.5.9: with t…
Laurianti Oct 10, 2026
15d09fc
Say that the servers before 1.5.3 delete every matching record despit…
Laurianti Oct 10, 2026
d3e9152
Say that Chroma 0.5.20 and 0.6.3 create a collection without its sche…
Laurianti Oct 10, 2026
89dc951
Say where the sparse vectors in metadata were verified: rejected by C…
Laurianti Oct 10, 2026
e6aef4f
Say that Chroma 0.5.20 and 0.6.3 drop a null key in an add and 1.5.2 …
Laurianti Oct 10, 2026
6925211
Say which kind of error each server names for a missing collection, v…
Laurianti Oct 10, 2026
d5b3402
Say how each server names a field that fails validation, checked in p…
Laurianti Oct 10, 2026
9c26f70
Say where KD-43 was verified: with the two clients on five versions
Laurianti Oct 10, 2026
b8cb89b
Say in the introduction of the defects that the column of the version…
Laurianti Oct 10, 2026
3a99e40
Say where the numbers of the very long filters were verified: with th…
Laurianti Oct 10, 2026
f7adecd
Say where KD-4 was verified: with the two clients on Chroma 1.0.0, 1.…
Laurianti Oct 10, 2026
0dd9ff7
Say where KD-14 was verified: Chroma 1.5.9 and 1.5.2 answer 1.0.0 to …
Laurianti Oct 10, 2026
b787db3
Say that Chroma 1.5.2 deletes every matching record despite a limit a…
Laurianti Oct 10, 2026
9c2cbb8
Say that Chroma 1.3.0 applies the space of a schema from this client,…
Laurianti Oct 10, 2026
c46361d
Say that Chroma 1.0.6 to 1.0.8 reject SPANN settings with 400, and 1.…
Laurianti Oct 10, 2026
b9bff46
Say that Chroma rejects only HNSW settings in a configuration next to…
Laurianti Oct 10, 2026
2879a8a
Say that Chroma rejects metadata keys that start with # or $ from 1.1…
Laurianti Oct 10, 2026
ed6a6d4
Say that Chroma Cloud takes $regex patterns of at most 256 characters…
Laurianti Oct 10, 2026
fa7299f
Say that Chroma Cloud also answers 1.0.0 to the version, and that ope…
Laurianti Oct 10, 2026
f63c6b9
Say that Chroma 1.5.0 also rejects a list of values of different type…
Laurianti Oct 10, 2026
9bde68f
Say in KD-6 that a $in of integers and floats goes or fails depending…
Laurianti Oct 10, 2026
aba7cf0
Say in KD-9 and KD-10 what Chroma Cloud answers, verified with the tw…
Laurianti Oct 10, 2026
d193775
Say in KD-48 that new ids written after a delete get wrong neighbors …
Laurianti Oct 10, 2026
825e83e
Say that Chroma Cloud takes embeddings of at most 4,096 dimensions, v…
Laurianti Oct 10, 2026
186b9e3
Say that Chroma Cloud takes ids and collection names of at most 128 b…
Laurianti Oct 10, 2026
92ec859
Say that Chroma Cloud answers 429 to some queries at once on a collec…
Laurianti Oct 10, 2026
7466554
Say that Chroma Cloud takes at most 16 keys and 256-byte values in th…
Laurianti Oct 10, 2026
3055a1b
Say that Chroma Cloud answers 403 for a tenant or a database that doe…
Laurianti Oct 10, 2026
6eb6eec
Say that Chroma Cloud answers 409 when the resource name of a tenant …
Laurianti Oct 10, 2026
075d721
Say that Chroma Cloud rejects the where_clause form of the OpenAPI de…
Laurianti Oct 10, 2026
6a6d7b6
Say that Chroma Cloud rejects a sparse vector with indices out of ord…
Laurianti Oct 10, 2026
156aa82
Say that Chroma Cloud takes two sparse vector indexes in a collection…
Laurianti Oct 10, 2026
8bdde9a
Say that Chroma 1.5.9 answers 405 to the creation of a collection on …
Laurianti Oct 10, 2026
d5d23f9
Say how Chroma reads #id and #document in the where of a get, verifie…
Laurianti Oct 10, 2026
6d4d445
Say that Chroma 1.5.9 returns every collection to a list without a li…
Laurianti Oct 10, 2026
b999df7
Say that Chroma ignores an add of an id that exists, verified with th…
Laurianti Oct 10, 2026
6b94ec6
Say that $contains on a list matches the numeric type, verified with …
Laurianti Oct 10, 2026
775cde1
Say that Chroma stores an integer beyond 64 bits as a float, verified…
Laurianti Oct 10, 2026
9aba36c
Say that two Chroma 1.5.9 servers start on the same data without an e…
Laurianti Oct 10, 2026
c3a890c
Say that Chroma Cloud takes nreplica_count only in a schema, verified…
Laurianti Oct 10, 2026
47459e7
Say how each server answers the delete of a missing collection, verif…
Laurianti Oct 10, 2026
06b3b01
Say that Chroma compares only numbers with $gt and has no $not, verif…
Laurianti Oct 10, 2026
4869e0f
Say that Chroma 1.5.9 accepts an empty tenant in the path, checked in…
Laurianti Oct 10, 2026
5fe55c1
Say how Chroma 1.5.9 answers function operations and a get by CRN, ve…
Laurianti Oct 10, 2026
d838ee5
Say where four metadata and schema limits were verified on older vers…
Laurianti Oct 10, 2026
890a98c
Say where KD-1 was verified again on 10 October 2026
Laurianti Oct 10, 2026
34c23cf
Say where KD-5 was verified again on 10 October 2026
Laurianti Oct 10, 2026
0a9a931
Say where KD-7 was verified again on 10 October 2026
Laurianti Oct 10, 2026
514de95
Say where KD-8 was verified again on 10 October 2026
Laurianti Oct 10, 2026
c70a9db
Say where KD-11 was verified again on 10 October 2026
Laurianti Oct 10, 2026
bb97d79
Say where KD-12 was verified again on 10 October 2026
Laurianti Oct 10, 2026
af825b5
Say where KD-13 was verified again on 10 October 2026
Laurianti Oct 10, 2026
8cc7161
Say where KD-18 was verified again on 10 October 2026
Laurianti Oct 10, 2026
80d00ba
Say where KD-19 was verified again on 10 October 2026
Laurianti Oct 10, 2026
6a5f3fe
Say where KD-20 was verified again on 10 October 2026
Laurianti Oct 10, 2026
15008fb
Say where KD-21 was verified again on 10 October 2026
Laurianti Oct 10, 2026
55c6d86
Say where KD-22 was verified again on 10 October 2026
Laurianti Oct 10, 2026
cc65358
Say where KD-23 was verified again on 10 October 2026
Laurianti Oct 10, 2026
9768052
Say where KD-24 was verified again on 10 October 2026
Laurianti Oct 10, 2026
f3875a7
Say where KD-25 was verified again on 10 October 2026
Laurianti Oct 10, 2026
cd88509
Say where KD-27 was verified again on 10 October 2026
Laurianti Oct 10, 2026
b502321
Say where KD-28 was verified again on 10 October 2026
Laurianti Oct 10, 2026
9b3d4fa
Say where KD-29 was verified again on 10 October 2026
Laurianti Oct 10, 2026
2ade610
Say where KD-30 was verified again on 10 October 2026
Laurianti Oct 10, 2026
c69a942
Say where KD-33 was verified again on 10 October 2026
Laurianti Oct 10, 2026
6b7becd
Say where KD-34 was verified again on 10 October 2026
Laurianti Oct 10, 2026
4d5868d
Say where KD-35 was verified again on 10 October 2026
Laurianti Oct 10, 2026
7718dd5
Say where KD-36 was verified again on 10 October 2026
Laurianti Oct 10, 2026
4cf4754
Say where KD-38 was verified again on 10 October 2026
Laurianti Oct 10, 2026
2a5a5f6
Say where KD-39 was verified again on 10 October 2026
Laurianti Oct 10, 2026
0dfea81
Say where KD-40 was verified again on 10 October 2026
Laurianti Oct 10, 2026
f6da20e
Say where KD-41 was verified again on 10 October 2026
Laurianti Oct 10, 2026
239395b
Say where KD-42 was verified again on 10 October 2026
Laurianti Oct 10, 2026
b88a7a9
Say where KD-44 was verified again on 10 October 2026
Laurianti Oct 10, 2026
ca54b31
Say where KD-45 was verified again on 10 October 2026
Laurianti Oct 10, 2026
75cffc8
Say where KD-46 was verified again on 10 October 2026
Laurianti Oct 10, 2026
9667bdd
Say where KD-51 was verified again on 10 October 2026
Laurianti Oct 10, 2026
b3864bb
Say where KD-3 was verified again on 10 October 2026
Laurianti Oct 10, 2026
40c7bf0
Remove KD-2, which did not show again on 10 October 2026, and write o…
Laurianti Oct 10, 2026
f0d7397
Remove KD-31, which did not show again on 10 October 2026
Laurianti Oct 10, 2026
0321e21
Remove KD-32, which did not show again on 10 October 2026
Laurianti Oct 10, 2026
26129a0
Say in KD-47 what each version answers to an id, as measured on 10 Oc…
Laurianti Oct 10, 2026
bb32aa1
Remove the example of an update that answers 500 on Chroma 1.0.0, whi…
Laurianti Oct 10, 2026
8d768b5
Say that KD-12 was verified again with a deleted database too, with t…
Laurianti Oct 10, 2026
71df92f
Say that the count a delete answers is, for a delete by ids, the numb…
Laurianti Oct 10, 2026
b732fd7
Say in the documentation of DeleteAsync that the count is the one the…
Laurianti Oct 10, 2026
000ba3e
Say in the records page and in a test comment that the count of a del…
Laurianti Oct 10, 2026
07cb76d
Merge pull request #123 from ChromaDotNet/server-limits-2
Laurianti Oct 10, 2026
8f4928a
Say that the Endpoint of a connection string is not an http or https …
Laurianti Oct 11, 2026
d10711e
Check that the whole message of an endpoint error leaves out the pass…
Laurianti Oct 11, 2026
899b4a9
Merge pull request #124 from ChromaDotNet/client-fixes
Laurianti Oct 11, 2026
e7ea05b
GetAsync with a limit of 0 reads the collection of a client made by n…
Laurianti Oct 11, 2026
7ea1164
Make the test of a get with a limit of 0 on a missing collection sync…
Laurianti Oct 11, 2026
6eb95ca
Merge pull request #125 from ChromaDotNet/fix-210
Laurianti Oct 11, 2026
6e8a948
Delete keys in updates and upserts without reading the records first,…
Laurianti Oct 10, 2026
2b00b2e
Delete documents without reading the records first when the client ha…
Laurianti Oct 11, 2026
42906b4
Throw before any request for a null document with NullDocumentsDelete…
Laurianti Oct 11, 2026
457f014
Say that the test of writes at the same time catches a client that re…
Laurianti Oct 12, 2026
5f5e4c8
Test that the client reads a record first only on Chroma Cloud and on…
Laurianti Oct 12, 2026
feafbd6
Say in docs/metadata.md that the record left is the one of the last w…
Laurianti Oct 12, 2026
1912312
Say in the comment of DeletionsInAnUpsert that a new record gets the …
Laurianti Oct 12, 2026
ad7003c
Add WithDocumentDeletionKey, which marks a deleted document under a m…
Laurianti Oct 12, 2026
fdc6d19
Add WithEmptyDocumentDeletions, which deletes a document by writing a…
Laurianti Oct 12, 2026
4176981
Let a collection client choose once how it deletes documents, and lis…
Laurianti Oct 12, 2026
17d1d7b
Say the change of a second WithDocumentCopyKey in its paragraph of do…
Laurianti Oct 12, 2026
9452362
Let the same way to delete documents be chosen again without an error…
Laurianti Oct 12, 2026
122021e
Compare the reads too in the test of the same way to delete documents…
Laurianti Oct 12, 2026
6a72fe0
Count once against the quota of Chroma Cloud the null of a sparse vec…
Laurianti Oct 12, 2026
1700a27
Throw by default for a write beyond the 32 metadata keys of Chroma Cl…
Laurianti Oct 12, 2026
4ae6b0f
Count against the quota of keys of Chroma Cloud the sparse vectors th…
Laurianti Oct 12, 2026
eb73d38
Say that the check of the quota of keys of Chroma Cloud is for a writ…
Laurianti Oct 12, 2026
d5b164e
Say in the error of the quota of keys of Chroma Cloud the keys that t…
Laurianti Oct 12, 2026
61f4282
Expect in QuotasOfChromaCloud the empty Metadata of a record without …
Laurianti Oct 12, 2026
9815e61
Let an empty list delete the key of a sparse vector again, now that t…
Laurianti Oct 12, 2026
9d852d2
Give an empty text its empty BM25 vector, as the Python client does, …
Laurianti Oct 12, 2026
4e4037f
Merge pull request #126 from ChromaDotNet/concurrent-deletions
Laurianti Oct 12, 2026
c092e01
Add KD-56: on Chroma Cloud a $regex on the documents that takes an em…
Laurianti Oct 12, 2026
b16e9d3
Throw on Chroma Cloud for a $regex or $not_regex on the documents who…
Laurianti Oct 12, 2026
080386b
Throw on Chroma Cloud also for a pattern that .NET cannot read or rea…
Laurianti Oct 12, 2026
5117b30
Test the ']' right after '[' or '[^' in the check of a pattern on Chr…
Laurianti Oct 12, 2026
4d9b5f4
Count as a pattern the client cannot check on Chroma Cloud one that .…
Laurianti Oct 12, 2026
a009752
Read a regular expression as Chroma does, with the syntax of the Rust…
Laurianti Oct 12, 2026
11e1b63
Check on Chroma Cloud a pattern as Chroma reads it, and throw there f…
Laurianti Oct 12, 2026
c780a57
Merge pull request #127 from ChromaDotNet/kd-regex-empty-text
Laurianti Oct 12, 2026
b1873f5
Say that Chroma 1.3.0 keeps l2 for the space of a schema, also with t…
Laurianti Oct 13, 2026
5c5f242
Say that Chroma 1.3.0 applies the space of a schema only when the sch…
Laurianti Oct 13, 2026
0cf259e
Test what a null document does in an update or an upsert on each serv…
Laurianti Oct 13, 2026
e6d7de8
Merge pull request #129 from ChromaDotNet/null-document-update
Laurianti Oct 13, 2026
5580a7d
Name the test of the space with a schema after the index it turns off
Laurianti Oct 13, 2026
6041cb2
Merge pull request #128 from ChromaDotNet/space-in-schema-130
Laurianti Oct 13, 2026
0c26289
Version 2.13.0
Laurianti Oct 13, 2026
b403bb5
Merge pull request #130 from ChromaDotNet/release-2.13.0
Laurianti Oct 13, 2026
be3af59
Bump the versions to 2.13.1
Laurianti Oct 13, 2026
f6802d5
Merge pull request #131 from ChromaDotNet/bump-2.13.1
Laurianti Oct 13, 2026
e2e4c73
Read again after an error of the server that can pass, with the expon…
Laurianti Oct 13, 2026
8614263
Read again after an answer whose lists do not have one item for every…
Laurianti Oct 13, 2026
beb12c7
Filter the documents with three characters in the tests of contains, …
Laurianti Oct 13, 2026
ba47e32
Count the attempts of a query whose ids all have a record from its fi…
Laurianti Oct 13, 2026
da12269
Test that a client made by name keeps ReadRetries through WithMetadat…
Laurianti Oct 13, 2026
7dcf2ac
Say that answers whose lists are uneven and the reads that a write ma…
Laurianti Oct 13, 2026
4ea6ef5
Test a query answer with a null list, which is uneven
Laurianti Oct 13, 2026
cf32e94
Keep the largest delay within the longest delay of Task.Delay, and re…
Laurianti Oct 13, 2026
0f23862
Test that a client made by name reads its collection again after the …
Laurianti Oct 13, 2026
9901445
Check that a query answer has one list of ids for every query embeddi…
Laurianti Oct 13, 2026
139e5c7
Merge pull request #133 from ChromaDotNet/cloud-contains-tests
Laurianti Oct 13, 2026
3fa7613
Merge pull request #132 from ChromaDotNet/read-retries
Laurianti Oct 13, 2026
7f10cf5
Delete with three characters in the test of a delete by ids with a fi…
Laurianti Oct 13, 2026
7a32cb0
Merge pull request #134 from ChromaDotNet/cud-contains-test
Laurianti Oct 13, 2026
769d98d
Version 2.14.0
Laurianti Oct 13, 2026
87afc52
Merge pull request #135 from ChromaDotNet/release-2.14.0
Laurianti Oct 13, 2026
d115a75
Bump the versions to 2.14.1
Laurianti Oct 13, 2026
b23d0c7
Merge pull request #136 from ChromaDotNet/bump-2.14.1
Laurianti Oct 13, 2026
73ba128
List in Used by the projects that use the client through another package
Laurianti Oct 15, 2026
c867012
Name the Aspire package that uses the client in Used by
Laurianti Oct 15, 2026
2715c87
Group Used by into the packages built on the client and the projects …
Laurianti Oct 15, 2026
daf7244
Say again that the two toolkits are of the .NET Foundation
Laurianti Oct 15, 2026
5115e12
Say under the provider where Semantic Kernel and Agent Framework cite it
Laurianti Oct 15, 2026
6be7c3c
Link Used by to the lines that show the use, with permalinks
Laurianti Oct 15, 2026
475eca8
List the uses and citations under the provider in Used by
Laurianti Oct 15, 2026
7c2e33f
Say what Semantic Kernel and Agent Framework do with the provider in …
Laurianti Oct 15, 2026
145ea16
Merge pull request #137 from ChromaDotNet/readme-used-by-transitive
Laurianti Oct 15, 2026
d507980
Try the client in a Codespace: devcontainer with Chroma 1.5.9 and a q…
Laurianti Oct 15, 2026
c2b1471
Used by: the LangChain .NET sample
Laurianti Oct 16, 2026
2300070
Used by: LangChain .NET and LangChain.Databases as two entries
Laurianti Oct 16, 2026
2b1bbcc
Merge pull request #138 from ChromaDotNet/codespaces-quickstart
Laurianti Oct 16, 2026
24e172c
Used by: BotSharp.Plugin.Chroma
Laurianti Oct 19, 2026
80cb5d9
Used by: LangChain.Databases tests as a use, its README as a citation
Laurianti Oct 19, 2026
f2bd9ff
ChromaWhereOperator.FromDictionary: a where filter from its dictionary
Laurianti Oct 19, 2026
cf0298b
Merge pull request #140 from ChromaDotNet/where-from-dictionary
Laurianti Oct 19, 2026
6bf9c7f
Merge pull request #139 from ChromaDotNet/readme-used-by-botsharp
Laurianti Oct 19, 2026
7b751c2
ChromaCollectionClient.DeleteAllAsync: every record, a page at a time
Laurianti Oct 19, 2026
3807497
An empty metadata goes as no metadata
Laurianti Oct 19, 2026
1e1a1bf
DeleteAllAsync: an error after a page that went is not run again
Laurianti Oct 19, 2026
bdc13b1
Used by: LlmTornado.VectorDatabases.ChromaDB
Laurianti Oct 19, 2026
48d53a4
Chroma Cloud: say which regex pattern goes beyond the quota of the te…
Laurianti Oct 19, 2026
c2866fc
ChromaWhereDocumentOperator.FromDictionary: a where_document filter f…
Laurianti Oct 19, 2026
7dd3904
The checks of Chroma Cloud read the filters from JSON too
Laurianti Oct 19, 2026
fdcc99f
A get in pages learns the quota of the reads of Chroma Cloud
Laurianti Oct 19, 2026
6cc3b70
DeleteAllAsync learns the quota of the deletes of Chroma Cloud
Laurianti Oct 19, 2026
8b639ae
Long lists of filters given as dictionaries go split too
Laurianti Oct 19, 2026
a4b5f2c
FromDictionary copies the dictionary and reads each list once
Laurianti Oct 19, 2026
61749c5
A get by ids learns the quota of Chroma Cloud too
Laurianti Oct 19, 2026
803c3b1
A get by ids in batches learns the quota of Chroma Cloud
Laurianti Oct 19, 2026
03746bb
FromDictionary writes the dictionary to JSON when it gets it
Laurianti Oct 19, 2026
3240987
Merge pull request #141 from ChromaDotNet/delete-all
Laurianti Oct 19, 2026
0464bb3
WithEmbeddingGenerator: embeddings from the documents and the query t…
Laurianti Oct 20, 2026
54bc394
Check the computed embeddings as the given ones, and no init accessor…
Laurianti Oct 20, 2026
2dad7c1
Match the literal dots of the signing identity in the Cosign command
Laurianti Oct 20, 2026
192c204
Merge pull request #142 from ChromaDotNet/default-embedding-generator
Laurianti Oct 20, 2026
5f92334
Merge pull request #143 from ChromaDotNet/cosign-identity-dots
Laurianti Oct 20, 2026
14712ba
Link the release notes of the packages to the GitHub release of their…
Laurianti Oct 21, 2026
ca08b49
Reject a value that is not a text under the metadata key chroma:docum…
Laurianti Oct 21, 2026
7944f2c
KD-58: chroma:document with a value that is not a text makes Chroma 1…
Laurianti Oct 21, 2026
fb394f6
Version 2.17.1
Laurianti Oct 21, 2026
9d44dfe
Check the null or the mark that a document copy key or deletion key o…
Laurianti Oct 21, 2026
ce1b390
Take as a text under chroma:document every value the client writes as…
Laurianti Oct 21, 2026
1626ea8
Write a chroma:document value as the request does, as an object, and …
Laurianti Oct 21, 2026
5013c8e
Merge pull request #144 from ChromaDotNet/reserved-key-and-release-notes
Laurianti Oct 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "ChromaDB.Client with Chroma",
"dockerComposeFile": "docker-compose.yml",
"service": "app",
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
"forwardPorts": [8000],
"portsAttributes": {
"8000": { "label": "Chroma" }
},
"postCreateCommand": "dotnet --version",
"postAttachCommand": "echo 'Chroma is on http://localhost:8000. Try the client: dotnet run Samples/quickstart.cs'",
"customizations": {
"vscode": {
"extensions": ["ms-dotnettools.csharp"]
}
}
}
12 changes: 12 additions & 0 deletions .devcontainer/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
services:
app:
image: mcr.microsoft.com/devcontainers/dotnet:1-10.0
volumes:
- ../..:/workspaces:cached
command: sleep infinity
# Chroma answers on localhost:8000 inside the app container too.
network_mode: service:chroma

chroma:
image: chromadb/chroma:1.5.9
restart: unless-stopped
2 changes: 2 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# The maintainers review every change.
* @ChromaDotNet/maintainers
17 changes: 17 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
version: 2
updates:
# Security updates only: the library keeps the lowest versions of its dependencies on purpose.
- package-ecosystem: nuget
directory: /
schedule:
interval: weekly
open-pull-requests-limit: 0

- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
groups:
actions:
patterns:
- '*'
184 changes: 174 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,55 @@ on:
push:
branches:
- master
- main
tags:
- v*
pull_request:
schedule:
- cron: '4 13 * * 2'

permissions:
contents: read

env:
CONFIGURATION: Release
DOTNET_VERSION: 8.0.x
# The seed of the property tests, so that every run checks the same cases: without it, each run takes new ones.
FSCHECK_REPLAY: '(5123468595321266860,8907826574119387873)'

jobs:
ci:
runs-on: ubuntu-latest
name: ${{ github.event_name != 'schedule' && 'CI' || 'CI (schedule)' }}
name: ${{ github.event_name != 'schedule' && 'CI' || 'CI (schedule)' }} (Chroma ${{ matrix.chroma }})
strategy:
fail-fast: false
matrix:
# v2 API: 0.5.16, the first release with it; 0.5.20, the first that rejects embeddings of different dimensions;
# 0.6.3, the last 0.x; 1.0.0, the first 1.x; 1.5.9, the current release; latest catches new releases without blocking.
chroma: ['0.5.16', '0.5.20', '0.6.3', '1.0.0', '1.5.9', 'latest']
include:
# v1 API, with ChromaApiVersion.V1: 0.4.10, without tenants and databases; 0.4.15, without count_collections
# and $not_contains; 0.4.23, with both; 0.5.15, the last release with only the v1 API. See docs/COMPATIBILITY.md.
- chroma: '0.4.10'
api: v1
- chroma: '0.4.15'
api: v1
- chroma: '0.4.23'
api: v1
- chroma: '0.5.15'
api: v1
- chroma: '1.5.9'
pack: true
continue-on-error: ${{ matrix.chroma == 'latest' }}
env:
CHROMA_IMAGE: chromadb/chroma:${{ matrix.chroma }}
CHROMA_TEST_API_VERSION: ${{ matrix.api }}
# An environment variable, so that the restore in the Build step reads it too:
# pack --no-build takes the package id of the referenced client project from that restore.
PackageIdPrefix: ${{ vars.PACKAGE_ID_PREFIX }}

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4

- name: CI version suffix
if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
Expand All @@ -31,7 +63,7 @@ jobs:
run: echo 'VERSION_SUFFIX=' >> $GITHUB_ENV

- name: Setup .NET
uses: actions/setup-dotnet@v4
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

Expand All @@ -41,34 +73,166 @@ jobs:
- name: Test
run: dotnet test -c ${{ env.CONFIGURATION }} --no-build --verbosity normal --logger 'GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true'

- name: Test in a non-default tenant and database
run: dotnet test -c ${{ env.CONFIGURATION }} --no-build --verbosity normal --logger 'GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true'
env:
CHROMA_TEST_TENANT: test_tenant
CHROMA_TEST_DATABASE: test_database

- name: Pack
if: ${{ matrix.pack }}
run: dotnet pack -c ${{ env.CONFIGURATION }} --no-build --version-suffix '${{ env.VERSION_SUFFIX }}'

# The release notes of every package link the GitHub release of its version, so they cannot stay at an older one.
- name: Check the release notes of the packages
if: ${{ matrix.pack }}
run: |
status=0
for pkg in $(find . -path '*/bin/*' -name '*.nupkg'); do
nuspec=$(unzip -p "$pkg" '*.nuspec')
version=$(echo "$nuspec" | sed -n 's:.*<version>\([0-9.]*\).*</version>.*:\1:p')
if echo "$nuspec" | grep -Eq "<releaseNotes>.*/releases/tag/v$(echo "$version" | sed 's/\./\\./g')([^0-9]|$)"; then
echo "$(basename "$pkg"): the release notes link the release v$version"
else
echo "::error::$(basename "$pkg"): the release notes do not link the release v$version"
status=1
fi
done
exit $status

- name: Upload
if: ${{ github.event_name != 'schedule' }}
uses: actions/upload-artifact@v4
if: ${{ matrix.pack && github.event_name != 'schedule' }}
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: packages
path: |
**/*.nupkg
**/*.snupkg

# An application on .NET 6 or 7 takes the netstandard2.0 build: the packages it brings must not warn that they do
# not support it. Built outside the repository, so its props do not apply, with -warnaserror, which turns the
# warnings of the targets of a package into errors (TreatWarningsAsErrors only covers the compiler).
- name: Build applications on .NET 6 and 7 with the package
if: ${{ matrix.pack }}
run: |
pkgdir="$GITHUB_WORKSPACE/ChromaDB.Client/bin/${{ env.CONFIGURATION }}"
file=$(basename "$(ls "$pkgdir"/*.nupkg | head -1)" .nupkg)
id=$(echo "$file" | sed -E 's/\.[0-9]+\.[0-9]+\.[0-9]+.*$//')
version="${file#$id.}"
mkdir -p "$RUNNER_TEMP/consumer" && cd "$RUNNER_TEMP/consumer"
cat > Consumer.csproj <<XML
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
<CheckEolTargetFramework>false</CheckEolTargetFramework>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="$id" Version="[$version]" />
</ItemGroup>
</Project>
XML
echo 'System.Console.WriteLine(new ChromaDB.Client.ChromaConfigurationOptions("http://localhost:8000").Uri);' > Program.cs
dotnet build -warnaserror -p:RestoreSources="https://api.nuget.org/v3/index.json;$pkgdir"

# Runs after Pack: it rebuilds the netstandard2.0 client without the version suffix.
- name: Test the netstandard2.0 build
if: ${{ matrix.pack }}
run: dotnet test ChromaDB.Client.Tests -c ${{ env.CONFIGURATION }} -p:ChromaClientTargetFramework=netstandard2.0 --verbosity normal --logger 'GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true'

trimming:
# The client published with trimming and with NativeAOT, where reflection-based serialization is off,
# running real requests: Samples/ChromaDB.Client.TrimmingTest. Every trimming or AOT warning is an error.
# --lists: Chroma 1.5.9 stores lists in metadata, so a rejected list is a failure.
runs-on: ubuntu-latest
name: Trimming and NativeAOT
services:
chroma:
image: chromadb/chroma:1.5.9
ports:
- 8000:8000

steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4

- name: Setup .NET
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: NativeAOT prerequisites
run: sudo apt-get install -y clang zlib1g-dev

- name: Wait for Chroma
run: for i in $(seq 1 60); do curl -sf http://localhost:8000/api/v2/heartbeat && break; sleep 1; done

- name: Publish with trimming
run: dotnet publish Samples/ChromaDB.Client.TrimmingTest -c ${{ env.CONFIGURATION }} -r linux-x64 -o trimmed -p:TreatWarningsAsErrors=true

- name: Run with trimming
run: ./trimmed/ChromaDB.Client.TrimmingTest http://localhost:8000 --lists

- name: Publish with NativeAOT
run: dotnet publish Samples/ChromaDB.Client.TrimmingTest -c ${{ env.CONFIGURATION }} -r linux-x64 -o aot -p:TrimmingTestAot=true -p:TreatWarningsAsErrors=true

- name: Run with NativeAOT
run: ./aot/ChromaDB.Client.TrimmingTest http://localhost:8000 --lists

framework:
# The tests whose outcome depends on the runtime, on .NET Framework 4.8, where the client runs its net462 build and
# the runtime formats and parses numbers in its own way: ChromaDB.Client.FrameworkTests, with no server.
runs-on: windows-latest
name: .NET Framework

steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4

- name: Setup .NET
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Test on .NET Framework 4.8
run: dotnet test ChromaDB.Client.FrameworkTests -c ${{ env.CONFIGURATION }} --verbosity normal

publish:
needs: ci
if: ${{ github.repository == 'ssone95/ChromaDB.Client' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/v')) && github.event_name != 'schedule' }}
needs: [ci, trimming, framework]
# Publishes the version tags: with the NUGET_API_KEY secret in the original repository, and with NuGet trusted
# publishing where the NUGET_USER variable is set. The original repository publishes the default branch too; elsewhere
# its pushes leave the packages as artifacts of the run.
if: ${{ github.event_name != 'schedule' && (startsWith(github.ref, 'refs/tags/v') && (github.repository == 'ssone95/ChromaDB.Client' || vars.NUGET_USER != '') || github.repository == 'ssone95/ChromaDB.Client' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)) }}
runs-on: ubuntu-latest
name: Publish
environment: nuget
permissions:
attestations: write
contents: read
id-token: write

steps:
- name: Setup .NET
uses: actions/setup-dotnet@v4
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Download
uses: actions/download-artifact@v4
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: packages

- name: Attest build provenance
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2
with:
subject-path: '**/*.nupkg'

- name: NuGet login
if: ${{ vars.NUGET_USER != '' }}
id: login
uses: NuGet/login@8d196754b4036150537f80ac539e15c2f1028841 # v1
with:
user: ${{ vars.NUGET_USER }}

- name: Publish to NuGet.org
run: dotnet nuget push '**/*.nupkg' --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json
run: dotnet nuget push '**/*.nupkg' --api-key ${{ steps.login.outputs.NUGET_API_KEY || secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
36 changes: 36 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: CodeQL

on:
push:
branches:
- main
pull_request:
schedule:
- cron: '17 5 * * 1'

permissions:
contents: read

jobs:
analyze:
name: Analyze C#
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write

steps:
- name: Checkout
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4

- name: Initialize CodeQL
uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
with:
languages: csharp
build-mode: none

- name: Analyze
uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
with:
category: /language:csharp
Loading