Skip to content

Conversation

@mpartipilo
Copy link
Collaborator

Summary

This PR adds strongly-typed aggregate result accessors and a ToTyped<T>() extension method for mapping aggregation results to custom types, along with a Roslyn analyzer to validate suffix-based property mappings at compile time.

Features

  • Typed accessor methods on AggregateResult and AggregateGroupByResult.Group:

    • Direct accessors: Text(), Integer(), Number(), Boolean(), Date()
    • TryGet pattern: TryGetText(), TryGetInteger(), etc.
    • Pattern matching: Match() and Property<T>() for flexible type handling
  • ToTyped<T>() extension method for mapping aggregate results to POCOs:

    • Supports full Aggregate.* types (e.g., Aggregate.Number? Price)
    • Supports suffix-based extraction (e.g., double? PriceMean, long? QuantitySum)
  • MetricsExtractor.FromType<T>() to automatically generate returnMetrics from a type definition, ensuring the query and result mapping stay in sync

  • Roslyn analyzer (WEAVIATE002, WEAVIATE003) that validates types at ToTyped<T>() and MetricsExtractor.FromType<T>() call sites:

    • Warns when properties lack recognized suffixes
    • Warns when suffix types are incompatible (e.g., string TitleSum)

Example

public class ProductStats
{
    public double? PriceMean { get; set; }
    public double? PriceMin { get; set; }
    public long? QuantitySum { get; set; }
    public Aggregate.Text? Category { get; set; }
}

// Extract metrics from type definition
var metrics = MetricsExtractor.FromType<ProductStats>();

// Execute query
var result = await collection.Aggregate.OverAll(returnMetrics: metrics);

// Map to typed result
var stats = result.ToTyped<ProductStats>();
Console.WriteLine($"Average price: {stats.Properties.PriceMean}");

## Test plan

- [x] Unit tests for all accessor methods (Text, Integer, Number, Boolean, Date)
- [x] Unit tests for TryGet pattern methods
- [x] Unit tests for Match pattern methods
- [x] Unit tests for `ToTyped<T>()` with full aggregate types
- [x] Unit tests for `ToTyped<T>()` with suffix-based extraction
- [x] Unit tests for `MetricsExtractor.FromType<T>()`
- [x] All 67 aggregate-related tests passing

Copy link

@orca-security-eu orca-security-eu bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Infrastructure as Code high 0   medium 0   low 0   info 0 View in Orca
Passed Passed SAST high 0   medium 0   low 0   info 0 View in Orca
Passed Passed Secrets high 0   medium 0   low 0   info 0 View in Orca
Passed Passed Vulnerabilities high 0   medium 0   low 0   info 0 View in Orca

@github-actions
Copy link

github-actions bot commented Jan 1, 2026

Summary - Weaviate C# Client Coverage

Summary
Generated on: 01/09/2026 - 14:12:43
Coverage date: 01/09/2026 - 14:06:15 - 01/09/2026 - 14:11:57
Parser: MultiReport (51x Cobertura)
Assemblies: 2
Classes: 315
Files: 205
Line coverage: 58.3% (11503 of 19718)
Covered lines: 11503
Uncovered lines: 8215
Coverable lines: 19718
Total lines: 38765
Branch coverage: 49.9% (2651 of 5311)
Covered branches: 2651
Total branches: 5311
Method coverage: Feature is only available for sponsors

Coverage

Weaviate.Client - 60.9%
Name Line Branch
Weaviate.Client 60.9% 52.7%
Weaviate.Client.AggregateClient 51.3% 31.8%
Weaviate.Client.AggregateClientHybridExtensions 0%
Weaviate.Client.AliasClient 100% 62.5%
Weaviate.Client.ApiKeyTokenService 100% 50%
Weaviate.Client.Auth 9.5%
Weaviate.Client.AuthenticatedHttpHandler 71.7% 60%
Weaviate.Client.BackupClient 85.9% 44.4%
Weaviate.Client.BaseCollectionClient 0% 0%
Weaviate.Client.Cache.SchemaCache 69.4% 60%
Weaviate.Client.ClientConfiguration 100% 100%
Weaviate.Client.ClusterClient 86.2% 64.2%
Weaviate.Client.CollectionClient 98.7% 87.5%
Weaviate.Client.CollectionClientExtensions 100% 100%
Weaviate.Client.CollectionConfigClient 100% 66.6%
Weaviate.Client.CollectionsClient 32.3% 35%
Weaviate.Client.Configure 65.7% 65.7%
Weaviate.Client.Connect 25.5% 0%
Weaviate.Client.DataClient 91.4% 79.6%
Weaviate.Client.DefaultTokenServiceFactory 5.7% 6.8%
Weaviate.Client.DependencyInjection.WeaviateClientFactory 0% 0%
Weaviate.Client.DependencyInjection.WeaviateInitializationService 0%
Weaviate.Client.DependencyInjection.WeaviateOptions 0%
Weaviate.Client.DependencyInjection.WeaviateServiceCollectionExtensions 0% 0%
Weaviate.Client.ExceptionHelper 89.6% 86.5%
Weaviate.Client.Factory 100%
Weaviate.Client.Generate 100%
Weaviate.Client.GenerateClient 38.4% 45.6%
Weaviate.Client.GenerateClientHybridExtensions 48.8%
Weaviate.Client.GenerativeConfigFactory 5.2% 100%
Weaviate.Client.GenerativeProviderFactory 1%
Weaviate.Client.GroupsClient 100%
Weaviate.Client.GroupsOidcClient 47.8%
Weaviate.Client.Grpc.RetryInterceptor 41.6% 37.5%
Weaviate.Client.Grpc.WeaviateGrpcClient 77% 61.8%
Weaviate.Client.Grpc.WeaviateGrpcServerException 0%
Weaviate.Client.Internal.KeySortedList`2 43.7%
Weaviate.Client.Internal.MultiKeySortedList`2 85.3% 87.5%
Weaviate.Client.Models.Aggregate 100%
Weaviate.Client.Models.AggregateGroupByResult 42.2% 19.8%
Weaviate.Client.Models.AggregateResult 92.6% 69.7%
Weaviate.Client.Models.Alias 100%
Weaviate.Client.Models.AliasesResource 100%
Weaviate.Client.Models.AndNestedFilter 50%
Weaviate.Client.Models.AutoArray`1 100% 100%
Weaviate.Client.Models.AutoArrayBuilder 100% 100%
Weaviate.Client.Models.Backup 60%
Weaviate.Client.Models.BackupBackend 20%
Weaviate.Client.Models.BackupClientConfig 100%
Weaviate.Client.Models.BackupCreateOperation 100%
Weaviate.Client.Models.BackupCreateRequest 100%
Weaviate.Client.Models.BackupOperationBase 63.9% 65.3%
Weaviate.Client.Models.BackupRestoreOperation 100%
Weaviate.Client.Models.BackupRestoreRequest 100%
Weaviate.Client.Models.BackupsResource 100%
Weaviate.Client.Models.BackupStatusExtensions 75% 71.4%
Weaviate.Client.Models.BatchInsertRequest 52.1%
Weaviate.Client.Models.BatchInsertResponse 80%
Weaviate.Client.Models.BatchInsertResponseEntry 100%
Weaviate.Client.Models.BatchReferenceReturn 29% 0%
Weaviate.Client.Models.BM25Config 66.6% 83.3%
Weaviate.Client.Models.Bm25ConfigUpdate 60% 50%
Weaviate.Client.Models.BM25Operator 66.6%
Weaviate.Client.Models.ClusterNode 38.4%
Weaviate.Client.Models.ClusterNodeVerbose 23% 0%
Weaviate.Client.Models.CollectionConfig 91.1% 57.1%
Weaviate.Client.Models.CollectionConfigCommon 85.5% 57.6%
Weaviate.Client.Models.CollectionConfigExport 100% 100%
Weaviate.Client.Models.CollectionsResource 100%
Weaviate.Client.Models.CollectionUpdate 40.9% 50%
Weaviate.Client.Models.CurrentUserInfo 80%
Weaviate.Client.Models.DatabaseUser 66.6%
Weaviate.Client.Models.DataReference 100%
Weaviate.Client.Models.DataResource 100%
Weaviate.Client.Models.DataTypeExtensions 0% 0%
Weaviate.Client.Models.DeleteManyObjectResult 100%
Weaviate.Client.Models.DeleteManyResult 100%
Weaviate.Client.Models.DynamicDto 0%
Weaviate.Client.Models.EmptyBackend 33.3%
Weaviate.Client.Models.FilesystemBackend 100%
Weaviate.Client.Models.Filter 67% 50%
Weaviate.Client.Models.Filter`1 50% 50%
Weaviate.Client.Models.FlatDto 100%
Weaviate.Client.Models.FlexibleConverter`1 11.3% 3.4%
Weaviate.Client.Models.FlexibleStringConverter 38.4% 25%
Weaviate.Client.Models.Generative.Providers 28.2%
Weaviate.Client.Models.GenerativeConfig 7.5%
Weaviate.Client.Models.GenerativeConfigSerialization 46.8% 55.4%
Weaviate.Client.Models.GenerativeDebug 0%
Weaviate.Client.Models.GenerativeGroupByObject 100%
Weaviate.Client.Models.GenerativeGroupByResult 100%
Weaviate.Client.Models.GenerativePrompt 100%
Weaviate.Client.Models.GenerativeProvider 83.3%
Weaviate.Client.Models.GenerativeReply 100%
Weaviate.Client.Models.GenerativeResult 20% 0%
Weaviate.Client.Models.GenerativeWeaviateGroup 100%
Weaviate.Client.Models.GenerativeWeaviateObject 100%
Weaviate.Client.Models.GenerativeWeaviateResult 100%
Weaviate.Client.Models.GeoCoordinate 100%
Weaviate.Client.Models.GeoCoordinateConstraint 0%
Weaviate.Client.Models.GroupByObject 100%
Weaviate.Client.Models.GroupByRequest 100%
Weaviate.Client.Models.GroupByResult 100%
Weaviate.Client.Models.GroupByResult`2 100%
Weaviate.Client.Models.GroupedTask 100%
Weaviate.Client.Models.GroupRoleAssignment 0%
Weaviate.Client.Models.GroupsResource 100%
Weaviate.Client.Models.HnswDto 100%
Weaviate.Client.Models.HybridNearTextBuilder 68.8%
Weaviate.Client.Models.HybridNearVectorBuilder 60.9%
Weaviate.Client.Models.HybridVectorInput 91% 85.7%
Weaviate.Client.Models.HybridVectorInputBuilder 100%
Weaviate.Client.Models.InvertedIndexConfig 69% 72.7%
Weaviate.Client.Models.InvertedIndexConfigUpdate 80% 50%
Weaviate.Client.Models.JsonConverterEmptyCollectionAsNull 73.6% 50%
Weaviate.Client.Models.Metadata 100%
Weaviate.Client.Models.MetadataQuery 80.9%
Weaviate.Client.Models.MetaInfo 90.9% 50%
Weaviate.Client.Models.Metrics 84.8% 60%
Weaviate.Client.Models.ModelsToDtoExtensions 100% 85%
Weaviate.Client.Models.ModuleConfigList 16.6% 7.1%
Weaviate.Client.Models.Move 100%
Weaviate.Client.Models.MultiTenancyConfig 100%
Weaviate.Client.Models.MultiTenancyConfigUpdate 60%
Weaviate.Client.Models.MultiVectorDto 100%
Weaviate.Client.Models.MultiVectorEncodingDto 100%
Weaviate.Client.Models.MuveraDto 100% 100%
Weaviate.Client.Models.NamedVector 100% 100%
Weaviate.Client.Models.NearTextBuilder 100%
Weaviate.Client.Models.NearTextInput 100%
Weaviate.Client.Models.NearVectorBuilder 100%
Weaviate.Client.Models.NearVectorInput 54.5%
Weaviate.Client.Models.NestedFilter 100%
Weaviate.Client.Models.NodesResource 100%
Weaviate.Client.Models.NodeStatusExtensions 60% 20%
Weaviate.Client.Models.NotNestedFilter 100%
Weaviate.Client.Models.ObjectReference 80%
Weaviate.Client.Models.ObjectStorageBackend 0%
Weaviate.Client.Models.OrNestedFilter 100%
Weaviate.Client.Models.PermissionResourceExtensions 79.7% 33.3%
Weaviate.Client.Models.Permissions 66.5% 50%
Weaviate.Client.Models.PermissionScope 100%
Weaviate.Client.Models.PhoneNumber 88.8%
Weaviate.Client.Models.Property 98.4% 79.6%
Weaviate.Client.Models.Property`1 100%
Weaviate.Client.Models.PropertyFilter 81.3% 75%
Weaviate.Client.Models.PropertyHelper 69.8% 56.9%
Weaviate.Client.Models.PropertyUpdate 25%
Weaviate.Client.Models.QueryReference 100%
Weaviate.Client.Models.Reference 100%
Weaviate.Client.Models.ReferenceFilter 100%
Weaviate.Client.Models.ReferenceUpdate 0%
Weaviate.Client.Models.ReplicateRequest 100%
Weaviate.Client.Models.ReplicateResource 100%
Weaviate.Client.Models.ReplicationClientConfig 100%
Weaviate.Client.Models.ReplicationConfig 100%
Weaviate.Client.Models.ReplicationConfigUpdate 57.1%
Weaviate.Client.Models.ReplicationOperation 87.5% 50%
Weaviate.Client.Models.ReplicationOperationError 0%
Weaviate.Client.Models.ReplicationOperationStatus 70.5% 0%
Weaviate.Client.Models.ReplicationOperationTracker 64% 54.5%
Weaviate.Client.Models.Rerank 100%
Weaviate.Client.Models.Reranker 16%
Weaviate.Client.Models.RerankerConfigSerialization 56.8% 55%
Weaviate.Client.Models.RoleInfo 100%
Weaviate.Client.Models.RolesResource 100%
Weaviate.Client.Models.ShardInfo 100%
Weaviate.Client.Models.ShardingConfig 100%
Weaviate.Client.Models.ShardStatusExtensions 100% 50%
Weaviate.Client.Models.SimpleTargetVectors 100%
Weaviate.Client.Models.SinglePrompt 100%
Weaviate.Client.Models.Sort 100% 50%
Weaviate.Client.Models.SortExtensions 100%
Weaviate.Client.Models.StopwordConfig 69.5% 75%
Weaviate.Client.Models.StopwordsConfigUpdate 57.1% 50%
Weaviate.Client.Models.TargetVectors 75.5% 0%
Weaviate.Client.Models.Tenant 38.8% 13.3%
Weaviate.Client.Models.TenantsResource 100%
Weaviate.Client.Models.TimeFilter 75% 25%
Weaviate.Client.Models.Typed.AggregateGroupByResult`1 100% 100%
Weaviate.Client.Models.Typed.AggregatePropertyMapper 84.8% 61.7%
Weaviate.Client.Models.Typed.AggregateResult`1 100%
Weaviate.Client.Models.Typed.BooleanMetricsAttribute 100%
Weaviate.Client.Models.Typed.DateMetricsAttribute 100%
Weaviate.Client.Models.Typed.GenerativeGroupByObject`1 0%
Weaviate.Client.Models.Typed.GenerativeGroupByResult`1 0%
Weaviate.Client.Models.Typed.GenerativeWeaviateGroup`1 0%
Weaviate.Client.Models.Typed.GenerativeWeaviateObject`1 0%
Weaviate.Client.Models.Typed.GenerativeWeaviateResult`1 0%
Weaviate.Client.Models.Typed.GroupByObject`1 0%
Weaviate.Client.Models.Typed.GroupByResult`1 0%
Weaviate.Client.Models.Typed.IntegerMetricsAttribute 100%
Weaviate.Client.Models.Typed.MetricsExtractor 81.5% 79.8%
Weaviate.Client.Models.Typed.NumberMetricsAttribute 100%
Weaviate.Client.Models.Typed.TextMetricsAttribute 100%
Weaviate.Client.Models.Typed.TypedResultConverter 20% 7.6%
Weaviate.Client.Models.Typed.WeaviateGroup`2 0%
Weaviate.Client.Models.Typed.WeaviateObject`1 47.3% 37.5%
Weaviate.Client.Models.TypedBase`1 70.5%
Weaviate.Client.Models.TypedGuid 66.6%
Weaviate.Client.Models.TypedValue`1 80%
Weaviate.Client.Models.User 0%
Weaviate.Client.Models.UserMetadata 0%
Weaviate.Client.Models.UserRoleAssignment 100%
Weaviate.Client.Models.UsersResource 100%
Weaviate.Client.Models.Vector 45.3% 28.1%
Weaviate.Client.Models.VectorBuilder 30% 27.7%
Weaviate.Client.Models.VectorConfig 82.7% 50%
Weaviate.Client.Models.VectorConfigList 59.3% 60%
Weaviate.Client.Models.VectorConfigUpdate 50%
Weaviate.Client.Models.VectorIndex 88.6%
Weaviate.Client.Models.VectorIndexConfig 100%
Weaviate.Client.Models.VectorIndexConfigUpdate 68.4% 33.3%
Weaviate.Client.Models.VectorIndexConfigUpdateDynamic 0% 0%
Weaviate.Client.Models.VectorIndexConfigUpdateFlat 40%
Weaviate.Client.Models.VectorIndexConfigUpdateHNSW 52.9%
Weaviate.Client.Models.VectorIndexMappingExtensions 86.5% 71.7%
Weaviate.Client.Models.VectorIndexSerialization 56.3% 42.3%
Weaviate.Client.Models.VectorInputBuilderFactories 100% 100%
Weaviate.Client.Models.Vectorizer 10.7% 0%
Weaviate.Client.Models.VectorizerAttribute 100%
Weaviate.Client.Models.VectorizerConfig 64.1% 56.2%
Weaviate.Client.Models.VectorizerRegistry 68.9% 71.4%
Weaviate.Client.Models.Vectorizers.VectorizerConfigFactory 58% 62.5%
Weaviate.Client.Models.VectorMulti`1 40.7% 23%
Weaviate.Client.Models.VectorQuery 45% 50%
Weaviate.Client.Models.Vectors 37.5% 100%
Weaviate.Client.Models.VectorSearchInput 86.3% 16.6%
Weaviate.Client.Models.VectorSingle`1 22.7% 0%
Weaviate.Client.Models.WeaviateGroup`1 80%
Weaviate.Client.Models.WeaviateObject 88.8%
Weaviate.Client.Models.WeaviateObjectExtensions 95.6% 75%
Weaviate.Client.Models.WeaviateResult 100%
Weaviate.Client.Models.WeaviateResult`1 100%
Weaviate.Client.Models.WeightedField 0%
Weaviate.Client.Models.WeightedFields 0% 0%
Weaviate.Client.Models.WeightedTargetVectors 100% 100%
Weaviate.Client.NearMediaBuilder 95.2% 50%
Weaviate.Client.NearMediaInput 100%
Weaviate.Client.NodesClient 87.5% 50%
Weaviate.Client.OAuthConfig 0%
Weaviate.Client.OAuthTokenService 0% 0%
Weaviate.Client.ObjectHelper 54.6% 38.2%
Weaviate.Client.QueryClient 67.3% 55%
Weaviate.Client.QueryClientHybridExtensions 48.8% 25%
Weaviate.Client.QueryClientNearTextExtensions 74.2% 75%
Weaviate.Client.ReplicationsClient 87% 51.7%
Weaviate.Client.RerankerConfigFactory 14.2% 100%
Weaviate.Client.Rest.EnumMemberJsonConverter`1 100% 78.5%
Weaviate.Client.Rest.EnumMemberJsonConverterFactory 100%
Weaviate.Client.Rest.HttpResponseMessageExtensions 87.5% 62.5%
Weaviate.Client.Rest.InvalidEnumWireFormatException 0%
Weaviate.Client.Rest.WeaviateEndpoints 78.5% 75.8%
Weaviate.Client.Rest.WeaviateRestClient 89.5% 53.3%
Weaviate.Client.Rest.WeaviateRestClientException 0% 0%
Weaviate.Client.Rest.WeaviateRestServerException 0% 0%
Weaviate.Client.Rest.WeaviateUnexpectedStatusCodeException 100%
Weaviate.Client.RetryHandler 98.1% 83.3%
Weaviate.Client.RetryPolicy 81.2% 50%
Weaviate.Client.RolesClient 90.3% 50%
Weaviate.Client.Serialization.Converters.BlobPropertyConverter 58.8% 37.5%
Weaviate.Client.Serialization.Converters.BoolPropertyConverter 80% 50%
Weaviate.Client.Serialization.Converters.DatePropertyConverter 51.3% 36.8%
Weaviate.Client.Serialization.Converters.GeoPropertyConverter 52.2% 23.6%
Weaviate.Client.Serialization.Converters.IntPropertyConverter 66.6% 50%
Weaviate.Client.Serialization.Converters.NumberPropertyConverter 64.7% 47%
Weaviate.Client.Serialization.Converters.ObjectPropertyConverter 18% 7.3%
Weaviate.Client.Serialization.Converters.PhonePropertyConverter 51.8% 33.3%
Weaviate.Client.Serialization.Converters.TextPropertyConverter 75% 75%
Weaviate.Client.Serialization.Converters.UuidPropertyConverter 61.1% 37.5%
Weaviate.Client.Serialization.PropertyBag 28.9% 20.7%
Weaviate.Client.Serialization.PropertyConverterBase 65.3% 50%
Weaviate.Client.Serialization.PropertyConverterRegistry 78.1% 70.1%
Weaviate.Client.TenantsClient 84.5% 37.5%
Weaviate.Client.TimeoutHelper 100% 100%
Weaviate.Client.Typed.TypedCollectionClient`1 95.5% 50%
Weaviate.Client.Typed.TypedDataClient`1 49%
Weaviate.Client.Typed.TypedGenerateClient`1 0.8% 0%
Weaviate.Client.Typed.TypedGenerateClientHybridExtensions 0%
Weaviate.Client.Typed.TypedQueryClient`1 10.6% 100%
Weaviate.Client.Typed.TypedQueryClientHybridExtensions 0%
Weaviate.Client.UsersClient 89.4% 66.6%
Weaviate.Client.UsersDatabaseClient 100% 62.5%
Weaviate.Client.UsersOidcClient 4.5%
Weaviate.Client.Validation.TypeValidationException 55.5%
Weaviate.Client.Validation.TypeValidator 75.7% 75%
Weaviate.Client.Validation.ValidationError 83.3%
Weaviate.Client.Validation.ValidationResult 100% 100%
Weaviate.Client.Validation.ValidationWarning 75%
Weaviate.Client.ValidationExtensions 80% 100%
Weaviate.Client.VectorizerFactory 6%
Weaviate.Client.VectorizerFactoryMulti 7.6%
Weaviate.Client.WeaviateAuthenticationException 100% 100%
Weaviate.Client.WeaviateAuthorizationException 100% 100%
Weaviate.Client.WeaviateBackupConflictException 100%
Weaviate.Client.WeaviateBadRequestException 100% 100%
Weaviate.Client.WeaviateClient 80.2% 57.9%
Weaviate.Client.WeaviateClientBuilder 59.3% 53.8%
Weaviate.Client.WeaviateClientBuilderExtensions 0%
Weaviate.Client.WeaviateClientException 66.6%
Weaviate.Client.WeaviateCollectionLimitReachedException 100% 100%
Weaviate.Client.WeaviateConflictException 100%
Weaviate.Client.WeaviateDefaults 100%
Weaviate.Client.WeaviateException 66.6%
Weaviate.Client.WeaviateExtensions 77.6% 54%
Weaviate.Client.WeaviateExternalModuleProblemException 100% 100%
Weaviate.Client.WeaviateFeatureNotSupportedException 100% 100%
Weaviate.Client.WeaviateModuleNotAvailableException 100% 100%
Weaviate.Client.WeaviateNotFoundException 14.8% 0%
Weaviate.Client.WeaviateServerException 66.6%
Weaviate.Client.WeaviateTimeoutException 100% 100%
Weaviate.Client.WeaviateUnprocessableEntityException 100% 100%
Weaviate.Client.Analyzers - 0%
Name Line Branch
Weaviate.Client.Analyzers 0% 0%
Weaviate.Client.Analyzers.AggregatePropertySuffixAnalyzer 0% 0%
Weaviate.Client.Analyzers.AutoArrayUsageAnalyzer 0% 0%
Weaviate.Client.Analyzers.HybridSearchNullParametersAnalyzer 0% 0%
Weaviate.Client.Analyzers.VectorizerFactoryAnalyzer 0% 0%

@mpartipilo mpartipilo force-pushed the jovial-haslett branch 2 times, most recently from bcb24aa to 9339d6a Compare January 6, 2026 16:12
- Introduced `AggregateResult<T>` and `AggregateGroupByResult<T>` for strongly-typed aggregate results.
- Implemented mapping from untyped aggregate results to typed results in `TypedResultConverter`.
- Added methods to extract aggregate metrics from types using `MetricsExtractor`.
- Updated `TypedCollectionClient` documentation to clarify usage of aggregate operations.
- Enhanced public API documentation to include new aggregate result types and methods.
…gregate and Weaviate.Client.Models.Typed namespaces
@mpartipilo mpartipilo merged commit 4ce5d8a into main Jan 9, 2026
15 checks passed
@mpartipilo mpartipilo deleted the jovial-haslett branch January 9, 2026 15:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants