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 @@ + true true true true 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? _getter; diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/VectorDataStrings.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/VectorDataStrings.cs index 26e67f790b8..f4e5eb34dc2 100644 --- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/VectorDataStrings.cs +++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/VectorDataStrings.cs @@ -5,6 +5,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Microsoft.Extensions.AI; +using Microsoft.Shared.DiagnosticIds; namespace Microsoft.Extensions.VectorData.ProviderServices; @@ -15,7 +16,7 @@ namespace Microsoft.Extensions.VectorData.ProviderServices; /// /// Exposes methods for constructing strings that should be used by providers when throwing exceptions. /// -[Experimental("MEVD9001")] +[Experimental(DiagnosticIds.Experiments.VectorDataProviderServices, UrlFormat = DiagnosticIds.UrlFormat)] public static class VectorDataStrings { public static string ConfiguredEmbeddingTypeIsUnsupportedByTheGenerator(VectorPropertyModel vectorProperty, Type userRequestedEmbeddingType) diff --git a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/VectorPropertyModel.cs b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/VectorPropertyModel.cs index 225db601022..cea93ca5321 100644 --- a/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/VectorPropertyModel.cs +++ b/src/Libraries/Microsoft.Extensions.VectorData.Abstractions/ProviderServices/VectorPropertyModel.cs @@ -9,6 +9,7 @@ using System.Threading; using System.Threading.Tasks; 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; /// Represents a vector 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 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