Skip to content

Commit

Permalink
RequestQueryParams
Browse files Browse the repository at this point in the history
  • Loading branch information
cincuranet committed Oct 3, 2024
1 parent d3e1793 commit e7bf3fb
Show file tree
Hide file tree
Showing 15 changed files with 44 additions and 37 deletions.
4 changes: 2 additions & 2 deletions ChromaDB.Client/ChromaDBClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public async Task<Response<Heartbeat>> Heartbeat()
return await _httpClient.Get<Heartbeat>("", new RequestQueryParams());
}

public async Task<Response<Collection>> CreateCollection(string name, IDictionary<string, object>? metadata = null, string? tenant = null, string? database = null)
public async Task<Response<Collection>> CreateCollection(string name, Dictionary<string, object>? metadata = null, string? tenant = null, string? database = null)
{
tenant = tenant is not null and not [] ? tenant : _currentTenant.Name;
database = database is not null and not [] ? database : _currentDatabase.Name;
Expand All @@ -67,7 +67,7 @@ public async Task<Response<Collection>> CreateCollection(string name, IDictionar
return await _httpClient.Post<CreateCollectionRequest, Collection>("collections?tenant={tenant}&database={database}", request, requestParams);
}

public async Task<Response<Collection>> GetOrCreateCollection(string name, IDictionary<string, object>? metadata = null, string? tenant = null, string? database = null)
public async Task<Response<Collection>> GetOrCreateCollection(string name, Dictionary<string, object>? metadata = null, string? tenant = null, string? database = null)
{
tenant = tenant is not null and not [] ? tenant : _currentTenant.Name;
database = database is not null and not [] ? database : _currentDatabase.Name;
Expand Down
14 changes: 7 additions & 7 deletions ChromaDB.Client/ChromaDBCollectionClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public ChromaDBCollectionClient(Collection collection, IChromaDBHttpClient httpC

public Collection Collection => _collection;

public async Task<Response<List<CollectionEntry>>> Get(List<string>? ids = null, IDictionary<string, object>? where = null, IDictionary<string, object>? whereDocument = null, int? limit = null, int? offset = null, List<string>? include = null)
public async Task<Response<List<CollectionEntry>>> Get(List<string>? ids = null, Dictionary<string, object>? where = null, Dictionary<string, object>? whereDocument = null, int? limit = null, int? offset = null, List<string>? include = null)
{
RequestQueryParams requestParams = new RequestQueryParams()
.Insert("{collection_id}", _collection.Id);
Expand All @@ -37,7 +37,7 @@ public async Task<Response<List<CollectionEntry>>> Get(List<string>? ids = null,
return new Response<List<CollectionEntry>>(response.StatusCode, entries, response.ErrorMessage);
}

public async Task<Response<List<List<CollectionQueryEntry>>>> Query(List<List<float>> queryEmbeddings, int nResults = 10, IDictionary<string, object>? where = null, IDictionary<string, object>? whereDocument = null, List<string>? include = null)
public async Task<Response<List<List<CollectionQueryEntry>>>> Query(List<List<float>> queryEmbeddings, int nResults = 10, Dictionary<string, object>? where = null, Dictionary<string, object>? whereDocument = null, List<string>? include = null)
{
RequestQueryParams requestParams = new RequestQueryParams()
.Insert("{collection_id}", _collection.Id);
Expand All @@ -54,7 +54,7 @@ public async Task<Response<List<List<CollectionQueryEntry>>>> Query(List<List<fl
return new Response<List<List<CollectionQueryEntry>>>(response.StatusCode, entries, response.ErrorMessage);
}

public async Task<Response<Response.Empty>> Add(List<string> ids, List<List<float>>? embeddings = null, List<IDictionary<string, object>>? metadatas = null, List<string>? documents = null)
public async Task<Response<Response.Empty>> Add(List<string> ids, List<List<float>>? embeddings = null, List<Dictionary<string, object>>? metadatas = null, List<string>? documents = null)
{
RequestQueryParams requestParams = new RequestQueryParams()
.Insert("{collection_id}", _collection.Id);
Expand All @@ -68,7 +68,7 @@ public async Task<Response<List<List<CollectionQueryEntry>>>> Query(List<List<fl
return await _httpClient.Post<CollectionAddRequest, Response.Empty>("collections/{collection_id}/add", request, requestParams);
}

public async Task<Response<Response.Empty>> Update(List<string> ids, List<List<float>>? embeddings = null, List<IDictionary<string, object>>? metadatas = null, List<string>? documents = null)
public async Task<Response<Response.Empty>> Update(List<string> ids, List<List<float>>? embeddings = null, List<Dictionary<string, object>>? metadatas = null, List<string>? documents = null)
{
RequestQueryParams requestParams = new RequestQueryParams()
.Insert("{collection_id}", _collection.Id);
Expand All @@ -82,7 +82,7 @@ public async Task<Response<List<List<CollectionQueryEntry>>>> Query(List<List<fl
return await _httpClient.Post<CollectionUpdateRequest, Response.Empty>("collections/{collection_id}/update", request, requestParams);
}

public async Task<Response<Response.Empty>> Upsert(List<string> ids, List<List<float>>? embeddings = null, List<IDictionary<string, object>>? metadatas = null, List<string>? documents = null)
public async Task<Response<Response.Empty>> Upsert(List<string> ids, List<List<float>>? embeddings = null, List<Dictionary<string, object>>? metadatas = null, List<string>? documents = null)
{
RequestQueryParams requestParams = new RequestQueryParams()
.Insert("{collection_id}", _collection.Id);
Expand All @@ -96,7 +96,7 @@ public async Task<Response<List<List<CollectionQueryEntry>>>> Query(List<List<fl
return await _httpClient.Post<CollectionUpsertRequest, Response.Empty>("collections/{collection_id}/upsert", request, requestParams);
}

public async Task<Response<Response.Empty>> Delete(List<string> ids, IDictionary<string, object>? where = null, IDictionary<string, object>? whereDocument = null)
public async Task<Response<Response.Empty>> Delete(List<string> ids, Dictionary<string, object>? where = null, Dictionary<string, object>? whereDocument = null)
{
RequestQueryParams requestParams = new RequestQueryParams()
.Insert("{collection_id}", _collection.Id);
Expand Down Expand Up @@ -129,7 +129,7 @@ public async Task<Response<List<CollectionEntry>>> Peek(int limit = 10)
return new Response<List<CollectionEntry>>(response.StatusCode, entries, response.ErrorMessage);
}

public async Task<Response<Response.Empty>> Modify(string? name = null, IDictionary<string, object>? metadata = null)
public async Task<Response<Response.Empty>> Modify(string? name = null, Dictionary<string, object>? metadata = null)
{
RequestQueryParams requestParams = new RequestQueryParams()
.Insert("{collection_id}", _collection.Id);
Expand Down
6 changes: 3 additions & 3 deletions ChromaDB.Client/Common/Helpers/HttpClientHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,10 +148,10 @@ private static string ValidateAndPrepareEndpoint(string endpoint, RequestQueryPa
private static string FormatRequestUri(string endpoint, RequestQueryParams queryParams)
{
string formattedEndpoint = endpoint;
foreach (KeyValuePair<string, string> entry in queryParams.Build())
foreach (var (key, value) in queryParams)
{
string urlEncodedQueryParam = Uri.EscapeDataString(entry.Value);
formattedEndpoint = formattedEndpoint.Replace(entry.Key, urlEncodedQueryParam);
string urlEncodedQueryParam = Uri.EscapeDataString(value);
formattedEndpoint = formattedEndpoint.Replace(key, urlEncodedQueryParam);
}
return formattedEndpoint;
}
Expand Down
4 changes: 2 additions & 2 deletions ChromaDB.Client/IChromaDBClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ public interface IChromaDBClient
Task<Response<Collection>> GetCollection(string name, string? tenant = null, string? database = null);
Task<Response<List<Collection>>> ListCollections(string? tenant = null, string? database = null);
Task<Response<Heartbeat>> Heartbeat();
Task<Response<Collection>> CreateCollection(string name, IDictionary<string, object>? metadata = null, string? tenant = null, string? database = null);
Task<Response<Collection>> GetOrCreateCollection(string name, IDictionary<string, object>? metadata = null, string? tenant = null, string? database = null);
Task<Response<Collection>> CreateCollection(string name, Dictionary<string, object>? metadata = null, string? tenant = null, string? database = null);
Task<Response<Collection>> GetOrCreateCollection(string name, Dictionary<string, object>? metadata = null, string? tenant = null, string? database = null);
Task<Response<Response.Empty>> DeleteCollection(string name, string? tenant = null, string? database = null);
Task<Response<string>> GetVersion();
Task<Response<bool>> Reset();
Expand Down
14 changes: 7 additions & 7 deletions ChromaDB.Client/IChromaDBCollectionClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ public interface IChromaDBCollectionClient
{
Collection Collection { get; }

Task<Response<List<CollectionEntry>>> Get(List<string>? ids = null, IDictionary<string, object>? where = null, IDictionary<string, object>? whereDocument = null, int? limit = null, int? offset = null, List<string>? include = null);
Task<Response<List<List<CollectionQueryEntry>>>> Query(List<List<float>> queryEmbeddings, int nResults = 10, IDictionary<string, object>? where = null, IDictionary<string, object>? whereDocument = null, List<string>? include = null);
Task<Response<Response.Empty>> Add(List<string> ids, List<List<float>>? embeddings = null, List<IDictionary<string, object>>? metadatas = null, List<string>? documents = null);
Task<Response<Response.Empty>> Update(List<string> ids, List<List<float>>? embeddings = null, List<IDictionary<string, object>>? metadatas = null, List<string>? documents = null);
Task<Response<Response.Empty>> Upsert(List<string> ids, List<List<float>>? embeddings = null, List<IDictionary<string, object>>? metadatas = null, List<string>? documents = null);
Task<Response<Response.Empty>> Delete(List<string> ids, IDictionary<string, object>? where = null, IDictionary<string, object>? whereDocument = null);
Task<Response<List<CollectionEntry>>> Get(List<string>? ids = null, Dictionary<string, object>? where = null, Dictionary<string, object>? whereDocument = null, int? limit = null, int? offset = null, List<string>? include = null);
Task<Response<List<List<CollectionQueryEntry>>>> Query(List<List<float>> queryEmbeddings, int nResults = 10, Dictionary<string, object>? where = null, Dictionary<string, object>? whereDocument = null, List<string>? include = null);
Task<Response<Response.Empty>> Add(List<string> ids, List<List<float>>? embeddings = null, List<Dictionary<string, object>>? metadatas = null, List<string>? documents = null);
Task<Response<Response.Empty>> Update(List<string> ids, List<List<float>>? embeddings = null, List<Dictionary<string, object>>? metadatas = null, List<string>? documents = null);
Task<Response<Response.Empty>> Upsert(List<string> ids, List<List<float>>? embeddings = null, List<Dictionary<string, object>>? metadatas = null, List<string>? documents = null);
Task<Response<Response.Empty>> Delete(List<string> ids, Dictionary<string, object>? where = null, Dictionary<string, object>? whereDocument = null);
Task<Response<int>> Count();
Task<Response<List<CollectionEntry>>> Peek(int limit = 10);
Task<Response<Response.Empty>> Modify(string? name = null, IDictionary<string, object>? metadata = null);
Task<Response<Response.Empty>> Modify(string? name = null, Dictionary<string, object>? metadata = null);
}
2 changes: 1 addition & 1 deletion ChromaDB.Client/Models/Collection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class Collection
public string Name { get; }

[JsonPropertyName("metadata")]
public IDictionary<string, object>? Metadata { get; init; }
public Dictionary<string, object>? Metadata { get; init; }

[JsonPropertyName("tenant")]
public string? Tenant { get; init; }
Expand Down
2 changes: 1 addition & 1 deletion ChromaDB.Client/Models/Requests/CollectionAddRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal class CollectionAddRequest
public List<List<float>>? Embeddings { get; init; }

[JsonPropertyName("metadatas")]
public List<IDictionary<string, object>>? Metadatas { get; init; }
public List<Dictionary<string, object>>? Metadatas { get; init; }

[JsonPropertyName("documents")]
public List<string>? Documents { get; init; }
Expand Down
4 changes: 2 additions & 2 deletions ChromaDB.Client/Models/Requests/CollectionDeleteRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ internal class CollectionDeleteRequest
public required List<string> Ids { get; init; }

[JsonPropertyName("where")]
public IDictionary<string, object>? Where { get; init; }
public Dictionary<string, object>? Where { get; init; }

[JsonPropertyName("where_document")]
public IDictionary<string, object>? WhereDocument { get; init; }
public Dictionary<string, object>? WhereDocument { get; init; }
}
4 changes: 2 additions & 2 deletions ChromaDB.Client/Models/Requests/CollectionGetRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ internal class CollectionGetRequest
public List<string>? Ids { get; init; }

[JsonPropertyName("where")]
public IDictionary<string, object>? Where { get; init; }
public Dictionary<string, object>? Where { get; init; }

[JsonPropertyName("where_document")]
public IDictionary<string, object>? WhereDocument { get; init; }
public Dictionary<string, object>? WhereDocument { get; init; }

[JsonPropertyName("limit")]
public int? Limit { get; init; }
Expand Down
2 changes: 1 addition & 1 deletion ChromaDB.Client/Models/Requests/CollectionModifyRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ internal class CollectionModifyRequest
public string? Name { get; init; }

[JsonPropertyName("metadata")]
public IDictionary<string, object>? Metadata { get; init; }
public Dictionary<string, object>? Metadata { get; init; }
}
4 changes: 2 additions & 2 deletions ChromaDB.Client/Models/Requests/CollectionQueryRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ internal class CollectionQueryRequest
public int NResults { get; init; } = 10;

[JsonPropertyName("where")]
public IDictionary<string, object>? Where { get; init; }
public Dictionary<string, object>? Where { get; init; }

[JsonPropertyName("where_document")]
public IDictionary<string, object>? WhereDocument { get; init; }
public Dictionary<string, object>? WhereDocument { get; init; }

[JsonPropertyName("include")]
public required List<string> Include { get; init; }
Expand Down
2 changes: 1 addition & 1 deletion ChromaDB.Client/Models/Requests/CollectionUpdateRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal class CollectionUpdateRequest
public List<List<float>>? Embeddings { get; init; }

[JsonPropertyName("metadatas")]
public List<IDictionary<string, object>>? Metadatas { get; init; }
public List<Dictionary<string, object>>? Metadatas { get; init; }

[JsonPropertyName("documents")]
public List<string>? Documents { get; init; }
Expand Down
2 changes: 1 addition & 1 deletion ChromaDB.Client/Models/Requests/CollectionUpsertRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal class CollectionUpsertRequest
public List<List<float>>? Embeddings { get; init; }

[JsonPropertyName("metadatas")]
public List<IDictionary<string, object>>? Metadatas { get; init; }
public List<Dictionary<string, object>>? Metadatas { get; init; }

[JsonPropertyName("documents")]
public List<string>? Documents { get; init; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ internal abstract class GetOrCreateCollectionRequestBase
public required string Name { get; init; }

[JsonPropertyName("metadata")]
public IDictionary<string, object>? Metadata { get; init; }
public Dictionary<string, object>? Metadata { get; init; }

[JsonInclude]
[JsonPropertyName("get_or_create")]
Expand Down
15 changes: 11 additions & 4 deletions ChromaDB.Client/Models/Requests/RequestQueryParams.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
using System.Globalization;
using System.Collections;
using System.Globalization;

namespace ChromaDB.Client.Models.Requests;

internal class RequestQueryParams
internal class RequestQueryParams : IEnumerable<(string key, string value)>
{
private Dictionary<string, string> _queryParams;

Expand All @@ -11,12 +12,18 @@ public RequestQueryParams()
_queryParams = new Dictionary<string, string>(StringComparer.Ordinal);
}

public IEnumerator<(string key, string value)> GetEnumerator()
=> _queryParams
.Select(kvp => (kvp.Key, kvp.Value))
.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();

public RequestQueryParams Insert(string key, string value)
{
_queryParams[key] = value;
return this;
}
public RequestQueryParams Insert(string key, IFormattable value) => Insert(key, value.ToString(null, CultureInfo.InvariantCulture));
public RequestQueryParams Insert(string key, IFormattable value)
=> Insert(key, value.ToString(null, CultureInfo.InvariantCulture));

public IDictionary<string, string> Build() => _queryParams;
}

0 comments on commit e7bf3fb

Please sign in to comment.