Repository navigation
v2.9.1
Patch release of ChromaDotNet.Client and ChromaDotNet.Client.DependencyInjection. Package validation against 2.9.0 finds no breaking change, and there is no new public API.
dotnet add package ChromaDotNet.Client
Fixed
- Buckets of
db.client.operation.duration: the histogram advises the boundaries of the OpenTelemetry semantic conventions, 0.001 to 10 seconds, which OpenTelemetry 1.10 and later apply. Before, it had the default boundaries, made for milliseconds, and P50, P90 and P99 were always 5 s in the Aspire dashboard. The net8.0 build now takes System.Diagnostics.DiagnosticSource 9.0.20. On the netstandard2.0 build, the one of applications on .NET Core 3.1 to 7, the application adds a view, which the README shows. - Chains of filters:
a & b & c, or a chain built in a loop, goes as one$andlist, as the Python client writes it, for the filters on the metadata, on the documents and in the Search API. Before, a chain of 32 filters threw aJsonExceptionabout an object cycle. - Very long chains: a single Chroma server turns a list of filters into an SQLite expression as deep as the list; Chroma 1.5.9 answers 500 beyond 987 to 994 filters in one list, and crashes from about 4,400. The client counts that depth, and beyond 900 splits each long list into lists with the same meaning: Chroma 1.0.0, 1.0.21 and 1.5.9 then take 4,000 filters and stay up with more.
- A null value in
AddAsync: it throws anArgumentExceptionbefore the request. Chroma 0.x would drop the key without an error, and 1.x rejects the request. InUpdateAsyncandUpsertAsynca null deletes the key, as before.
Documentation
- Known defects of the servers, in
docs/COMPATIBILITY.md, each reproduced without the client:$containsreading_and%as wildcards up to 1.0.12;- the text after a NUL character;
- floats truncated against int metadata, doubles read with an error in the last digit, and embeddings of a cosine collection read back different in the last bit, on 1.x;
- wrong query results under concurrent writes on 0.4.24 and 0.6.3;
- the limits of long filters.
- Chroma Cloud takes at most 8 predicates in a filter, the default quota of a tenant.
- Null values and
Metadata: how to delete a key with a null value, and that a record without keys comes back withMetadatanull.
Whole doubles already stored
Whole doubles that an earlier version of the client wrote as 2 instead of 2.0 stay integers in Chroma: on those records LessThan("d", 2.2) does not find d = 2 until they are written again.