diff --git a/Directory.Build.targets b/Directory.Build.targets
index 65fb54497d9..485395d60c6 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -26,7 +26,7 @@
$(NoWarn);AD0001
- $(NoWarn);EXTEXP0001;EXTEXP0002;EXTEXP0003;EXTEXP0004;EXTEXP0005;EXTEXP0006;EXTEXP0007;EXTEXP0008;EXTEXP0009;EXTEXP0010;EXTEXP0011;EXTEXP0012;EXTEXP0013;EXTEXP0014;EXTEXP0015;EXTEXP0016;EXTEXP0017;EXTEXP0018
+ $(NoWarn);EXTEXP0001;EXTEXP0002;EXTEXP0003;EXTEXP0004;EXTEXP0005;EXTEXP0006;EXTEXP0007;EXTEXP0008;EXTEXP0009;EXTEXP0010;EXTEXP0011;EXTEXP0012;EXTEXP0013;EXTEXP0014;EXTEXP0015;EXTEXP0016;EXTEXP0017;EXTEXP0018;MEVD9001$(NoWarn);EXTOBS0001;
diff --git a/docs/list-of-diagnostics.md b/docs/list-of-diagnostics.md
index b09fe41c3fa..4254cf9b25d 100644
--- a/docs/list-of-diagnostics.md
+++ b/docs/list-of-diagnostics.md
@@ -42,6 +42,7 @@ if desired.
| `EXTEXP0017` | Contextual options experiments |
| `EXTEXP0018` | HybridCache experiments |
| `MEAI001` | AI experiments |
+| `MEVD9001` | Vector Data experiments |
# Obsoletions
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/Microsoft.Extensions.VectorData.Abstractions.csproj b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/Microsoft.Extensions.VectorData.Abstractions.csproj
index a75cb820c8c..c09abd0b204 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/Microsoft.Extensions.VectorData.Abstractions.csproj
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/Microsoft.Extensions.VectorData.Abstractions.csproj
@@ -15,6 +15,7 @@
+ truetruetruetrue
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionJsonModelBuilder.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionJsonModelBuilder.cs
index d97c3a93c8a..af9400198e0 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionJsonModelBuilder.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionJsonModelBuilder.cs
@@ -7,6 +7,7 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using Microsoft.Extensions.AI;
+using Microsoft.Shared.DiagnosticIds;
namespace Microsoft.Extensions.VectorData.ProviderServices;
@@ -14,7 +15,7 @@ namespace Microsoft.Extensions.VectorData.ProviderServices;
/// Represents a model builder that performs logic specific to providers that use System.Text.Json for serialization.
/// This is an internal support type meant for use by providers only and not by applications.
///
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public abstract class CollectionJsonModelBuilder : CollectionModelBuilder
{
private JsonSerializerOptions? _jsonSerializerOptions;
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionModel.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionModel.cs
index 64d1796f776..10bc3d59f76 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionModel.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionModel.cs
@@ -9,6 +9,7 @@
using System.Linq.Expressions;
using System.Reflection;
using System.Runtime.CompilerServices;
+using Microsoft.Shared.DiagnosticIds;
using Microsoft.Shared.Diagnostics;
namespace Microsoft.Extensions.VectorData.ProviderServices;
@@ -17,7 +18,7 @@ namespace Microsoft.Extensions.VectorData.ProviderServices;
/// Represents a record in a vector store collection.
/// This is an internal support type meant for use by providers only and not by applications.
///
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public sealed class CollectionModel
{
private readonly Type _recordType;
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionModelBuilder.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionModelBuilder.cs
index 39cb5720d25..07c4c72b2dd 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionModelBuilder.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionModelBuilder.cs
@@ -8,6 +8,7 @@
using System.Linq;
using System.Reflection;
using Microsoft.Extensions.AI;
+using Microsoft.Shared.DiagnosticIds;
using Microsoft.Shared.Diagnostics;
namespace Microsoft.Extensions.VectorData.ProviderServices;
@@ -17,7 +18,7 @@ namespace Microsoft.Extensions.VectorData.ProviderServices;
/// This is an internal support type meant for use by providers only and not by applications.
///
/// This class is single-use only, and not thread-safe.
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public abstract class CollectionModelBuilder
{
///
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionModelBuildingOptions.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionModelBuildingOptions.cs
index c97f2214397..2e59613d7c6 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionModelBuildingOptions.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/CollectionModelBuildingOptions.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System.Diagnostics.CodeAnalysis;
+using Microsoft.Shared.DiagnosticIds;
namespace Microsoft.Extensions.VectorData.ProviderServices;
@@ -9,7 +10,7 @@ namespace Microsoft.Extensions.VectorData.ProviderServices;
/// Contains options affecting model building; passed to .
/// This is an internal support type meant for use by providers only and not by applications.
///
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public sealed class CollectionModelBuildingOptions
{
///
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/DataPropertyModel.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/DataPropertyModel.cs
index 471f0444eec..c9ce0412bc3 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/DataPropertyModel.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/DataPropertyModel.cs
@@ -3,6 +3,7 @@
using System;
using System.Diagnostics.CodeAnalysis;
+using Microsoft.Shared.DiagnosticIds;
namespace Microsoft.Extensions.VectorData.ProviderServices;
@@ -10,7 +11,7 @@ namespace Microsoft.Extensions.VectorData.ProviderServices;
/// Represents a data property on a vector store record.
/// This is an internal support type meant for use by providers only and not by applications.
///
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public class DataPropertyModel(string modelName, Type type) : PropertyModel(modelName, type)
{
///
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/EmbeddingGenerationDispatcher.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/EmbeddingGenerationDispatcher.cs
index 00300a11915..e799be1a06a 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/EmbeddingGenerationDispatcher.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/EmbeddingGenerationDispatcher.cs
@@ -7,6 +7,7 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.AI;
+using Microsoft.Shared.DiagnosticIds;
namespace Microsoft.Extensions.VectorData.ProviderServices;
@@ -18,7 +19,7 @@ namespace Microsoft.Extensions.VectorData.ProviderServices;
/// Each instance encapsulates both build-time embedding type resolution and runtime embedding generation
/// for a specific subtype.
///
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public abstract class EmbeddingGenerationDispatcher
{
///
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/EmbeddingGenerationDispatcher{TEmbedding}.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/EmbeddingGenerationDispatcher{TEmbedding}.cs
index 19643f437f6..6e68f8baf0d 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/EmbeddingGenerationDispatcher{TEmbedding}.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/EmbeddingGenerationDispatcher{TEmbedding}.cs
@@ -7,6 +7,7 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.AI;
+using Microsoft.Shared.DiagnosticIds;
namespace Microsoft.Extensions.VectorData.ProviderServices;
@@ -15,7 +16,7 @@ namespace Microsoft.Extensions.VectorData.ProviderServices;
/// This is an internal support type meant for use by providers only and not by applications.
///
/// The embedding type.
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public sealed class EmbeddingGenerationDispatcher : EmbeddingGenerationDispatcher
where TEmbedding : Embedding
{
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/Filter/FilterPreprocessingOptions.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/Filter/FilterPreprocessingOptions.cs
index b04f25cc612..bc32292be4d 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/Filter/FilterPreprocessingOptions.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/Filter/FilterPreprocessingOptions.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System.Diagnostics.CodeAnalysis;
+using Microsoft.Shared.DiagnosticIds;
namespace Microsoft.Extensions.VectorData.ProviderServices.Filter;
@@ -9,7 +10,7 @@ namespace Microsoft.Extensions.VectorData.ProviderServices.Filter;
/// Options for filter expression preprocessing.
/// This is an internal support type meant for use by providers only and not by applications.
///
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public class FilterPreprocessingOptions
{
///
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/Filter/FilterTranslatorBase.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/Filter/FilterTranslatorBase.cs
index 7dabf650be1..842953ef75b 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/Filter/FilterTranslatorBase.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/Filter/FilterTranslatorBase.cs
@@ -7,6 +7,7 @@
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
+using Microsoft.Shared.DiagnosticIds;
using Microsoft.Shared.Diagnostics;
namespace Microsoft.Extensions.VectorData.ProviderServices.Filter;
@@ -16,7 +17,7 @@ namespace Microsoft.Extensions.VectorData.ProviderServices.Filter;
/// Provides common functionality for preprocessing filter expressions and matching common patterns.
/// This is an internal support type meant for use by providers only and not by applications.
///
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public abstract class FilterTranslatorBase
{
///
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/Filter/QueryParameterExpression.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/Filter/QueryParameterExpression.cs
index 41f92c7b4f3..2489e164d87 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/Filter/QueryParameterExpression.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/Filter/QueryParameterExpression.cs
@@ -4,13 +4,14 @@
using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq.Expressions;
+using Microsoft.Shared.DiagnosticIds;
namespace Microsoft.Extensions.VectorData.ProviderServices.Filter;
///
/// An expression representation a query parameter (captured variable) in the filter expression.
///
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public class QueryParameterExpression(string name, object? value, Type type) : Expression
{
///
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/KeyPropertyModel.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/KeyPropertyModel.cs
index 3bbe76f8f86..6c4ef7357f4 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/KeyPropertyModel.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/KeyPropertyModel.cs
@@ -3,6 +3,7 @@
using System;
using System.Diagnostics.CodeAnalysis;
+using Microsoft.Shared.DiagnosticIds;
namespace Microsoft.Extensions.VectorData.ProviderServices;
@@ -10,7 +11,7 @@ namespace Microsoft.Extensions.VectorData.ProviderServices;
/// Represents a key property on a vector store record.
/// This is an internal support type meant for use by providers only and not by applications.
///
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public class KeyPropertyModel(string modelName, Type type) : PropertyModel(modelName, type)
{
///
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/PropertyModel.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/PropertyModel.cs
index 7fc863fe406..f9f25432b36 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/PropertyModel.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/PropertyModel.cs
@@ -6,6 +6,7 @@
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
+using Microsoft.Shared.DiagnosticIds;
namespace Microsoft.Extensions.VectorData.ProviderServices;
@@ -13,7 +14,7 @@ namespace Microsoft.Extensions.VectorData.ProviderServices;
/// Represents a property on a vector store record.
/// This is an internal support type meant for use by providers only and not by applications.
///
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public abstract class PropertyModel(string modelName, Type type)
{
private Func
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public class VectorPropertyModel(string modelName, Type type) : PropertyModel(modelName, type)
{
///
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/VectorPropertyModel{TInput}.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/VectorPropertyModel{TInput}.cs
index e975a8bb50c..9a1f38494db 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/VectorPropertyModel{TInput}.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/VectorPropertyModel{TInput}.cs
@@ -9,11 +9,12 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.AI;
+using Microsoft.Shared.DiagnosticIds;
namespace Microsoft.Extensions.VectorData.ProviderServices;
///
-[Experimental("MEVD9001")]
+[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
public sealed class VectorPropertyModel(string modelName) : VectorPropertyModel(modelName, typeof(TInput))
{
///
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/RecordDefinition/VectorStoreVectorProperty.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/RecordDefinition/VectorStoreVectorProperty.cs
index 95b119412eb..0d884411d2e 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/RecordDefinition/VectorStoreVectorProperty.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/RecordDefinition/VectorStoreVectorProperty.cs
@@ -5,6 +5,7 @@
using System.Diagnostics.CodeAnalysis;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.VectorData.ProviderServices;
+using Microsoft.Shared.DiagnosticIds;
using Microsoft.Shared.Diagnostics;
namespace Microsoft.Extensions.VectorData;
@@ -94,7 +95,7 @@ public int Dimensions
///
public Type? EmbeddingType { get; set; }
- [Experimental("MEVD9001")]
+ [Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
internal virtual VectorPropertyModel CreatePropertyModel()
=> new(Name, Type ?? throw new InvalidOperationException(VectorDataStrings.MissingTypeOnPropertyDefinition(this)))
{
diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/RecordDefinition/VectorStoreVectorProperty{TInput}.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/RecordDefinition/VectorStoreVectorProperty{TInput}.cs
index 11213d00fff..d59bc71d914 100644
--- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/RecordDefinition/VectorStoreVectorProperty{TInput}.cs
+++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/RecordDefinition/VectorStoreVectorProperty{TInput}.cs
@@ -4,6 +4,7 @@
using System.Diagnostics.CodeAnalysis;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.VectorData.ProviderServices;
+using Microsoft.Shared.DiagnosticIds;
namespace Microsoft.Extensions.VectorData;
@@ -28,7 +29,7 @@ public VectorStoreVectorProperty(string propertyName, int dimensions)
{
}
- [Experimental("MEVD9001")]
+ [Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)]
internal override VectorPropertyModel CreatePropertyModel()
=> new VectorPropertyModel(Name)
{
diff --git a/src/Shared/DiagnosticIds/DiagnosticIds.cs b/src/Shared/DiagnosticIds/DiagnosticIds.cs
index 94cc1a1f04a..db0a8d9b5ad 100644
--- a/src/Shared/DiagnosticIds/DiagnosticIds.cs
+++ b/src/Shared/DiagnosticIds/DiagnosticIds.cs
@@ -72,7 +72,12 @@ internal static class Experiments
internal const string AIOpenAIRealtime = "OPENAI002";
internal const string AIOpenAIJsonPatch = "SCME0001";
+ // All Vector Data experiments share a diagnostic ID but have different
+ // constants to manage which experiment each API belongs to.
+ internal const string VectorDataProviderServices = VectorDataExperiments;
+
private const string AIExperiments = "MEAI001";
+ private const string VectorDataExperiments = "MEVD9001";
}
internal static class LoggerMessage