diff --git a/src/Libraries/Microsoft.Extensions.AI.Abstractions/Contents/HostedFileContent.cs b/src/Libraries/Microsoft.Extensions.AI.Abstractions/Contents/HostedFileContent.cs
index 10335833eef..b3d99b55ecc 100644
--- a/src/Libraries/Microsoft.Extensions.AI.Abstractions/Contents/HostedFileContent.cs
+++ b/src/Libraries/Microsoft.Extensions.AI.Abstractions/Contents/HostedFileContent.cs
@@ -54,30 +54,10 @@ public string? MediaType
public string? Name { get; set; }
/// Gets or sets the size of the file in bytes.
- [Experimental(DiagnosticIds.Experiments.AIFiles, UrlFormat = DiagnosticIds.UrlFormat)]
- [JsonIgnore]
- public long? SizeInBytes
- {
- get => SizeInBytesCore;
- set => SizeInBytesCore = value;
- }
-
- [JsonInclude]
- [JsonPropertyName("sizeInBytes")]
- internal long? SizeInBytesCore { get; set; }
+ public long? SizeInBytes { get; set; }
/// Gets or sets when the file was created.
- [Experimental(DiagnosticIds.Experiments.AIFiles, UrlFormat = DiagnosticIds.UrlFormat)]
- [JsonIgnore]
- public DateTimeOffset? CreatedAt
- {
- get => CreatedAtCore;
- set => CreatedAtCore = value;
- }
-
- [JsonInclude]
- [JsonPropertyName("createdAt")]
- internal DateTimeOffset? CreatedAtCore { get; set; }
+ public DateTimeOffset? CreatedAt { get; set; }
/// Gets or sets the purpose for which the file was uploaded.
///
diff --git a/src/Libraries/Microsoft.Extensions.AI.Abstractions/Microsoft.Extensions.AI.Abstractions.json b/src/Libraries/Microsoft.Extensions.AI.Abstractions/Microsoft.Extensions.AI.Abstractions.json
index 3ebfc885c69..f48b3048be7 100644
--- a/src/Libraries/Microsoft.Extensions.AI.Abstractions/Microsoft.Extensions.AI.Abstractions.json
+++ b/src/Libraries/Microsoft.Extensions.AI.Abstractions/Microsoft.Extensions.AI.Abstractions.json
@@ -2399,7 +2399,7 @@
"Properties": [
{
"Member": "System.DateTimeOffset? Microsoft.Extensions.AI.HostedFileContent.CreatedAt { get; set; }",
- "Stage": "Experimental"
+ "Stage": "Stable"
},
{
"Member": "string Microsoft.Extensions.AI.HostedFileContent.FileId { get; set; }",
@@ -2423,7 +2423,7 @@
},
{
"Member": "long? Microsoft.Extensions.AI.HostedFileContent.SizeInBytes { get; set; }",
- "Stage": "Experimental"
+ "Stage": "Stable"
}
]
},
diff --git a/test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/HostedFileContentTests.cs b/test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/HostedFileContentTests.cs
index 87cc0baa09a..2fa1d637d61 100644
--- a/test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/HostedFileContentTests.cs
+++ b/test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/HostedFileContentTests.cs
@@ -1,8 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-#pragma warning disable MEAI001
-
using System;
using System.Text.Json;
using Xunit;
@@ -28,8 +26,10 @@ public void Constructor_String_PropsDefault()
Assert.Null(c.AdditionalProperties);
Assert.Null(c.SizeInBytes);
Assert.Null(c.CreatedAt);
+#pragma warning disable MEAI001
Assert.Null(c.Purpose);
Assert.Null(c.Scope);
+#pragma warning restore MEAI001
Assert.Equal(fileId, c.FileId);
}
@@ -153,6 +153,7 @@ public void CreatedAt_Roundtrips()
Assert.Null(c.CreatedAt);
}
+#pragma warning disable MEAI001
[Fact]
public void Purpose_Roundtrips()
{
@@ -178,6 +179,7 @@ public void Scope_Roundtrips()
c.Scope = null;
Assert.Null(c.Scope);
}
+#pragma warning restore MEAI001
[Fact]
public void Serialization_IncludesExperimentalProperties()
@@ -189,8 +191,10 @@ public void Serialization_IncludesExperimentalProperties()
MediaType = "text/plain",
SizeInBytes = 1024,
CreatedAt = now,
+#pragma warning disable MEAI001
Purpose = "fine-tune",
Scope = "container-1",
+#pragma warning restore MEAI001
};
var json = JsonSerializer.Serialize(content, AIJsonUtilities.DefaultOptions);
@@ -204,8 +208,10 @@ public void Serialization_IncludesExperimentalProperties()
Assert.NotNull(deserialized);
Assert.Equal(1024, deserialized.SizeInBytes);
Assert.Equal(now, deserialized.CreatedAt);
+#pragma warning disable MEAI001
Assert.Equal("fine-tune", deserialized.Purpose);
Assert.Equal("container-1", deserialized.Scope);
+#pragma warning restore MEAI001
}
[Theory]
@@ -257,8 +263,10 @@ public void JsonDeserialization_KnownPayload()
Assert.Equal("document.pdf", hostedFile.Name);
Assert.Equal(1024, hostedFile.SizeInBytes);
Assert.Equal(new DateTimeOffset(2024, 1, 15, 10, 30, 0, TimeSpan.Zero), hostedFile.CreatedAt);
+#pragma warning disable MEAI001
Assert.Equal("assistants", hostedFile.Purpose);
Assert.Equal("user", hostedFile.Scope);
+#pragma warning restore MEAI001
Assert.NotNull(hostedFile.AdditionalProperties);
Assert.Equal("val", hostedFile.AdditionalProperties["key"]?.ToString());
}
diff --git a/test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Image/ImageGenerationOptionsTests.cs b/test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Image/ImageGenerationOptionsTests.cs
index be47fd247c4..a8bca88fd88 100644
--- a/test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Image/ImageGenerationOptionsTests.cs
+++ b/test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Image/ImageGenerationOptionsTests.cs
@@ -35,7 +35,9 @@ public void Properties_Roundtrip()
{
ImageGenerationOptions options = new();
+#pragma warning disable MEAI001 // IImageGenerator is experimental
Func factory = generator => new { Representation = "raw data" };
+#pragma warning restore MEAI001
options.ResponseFormat = ImageGenerationResponseFormat.Data;
options.Count = 5;
@@ -72,9 +74,9 @@ public void JsonSerialization_Roundtrips()
ModelId = "test-model",
};
- string json = JsonSerializer.Serialize(options, TestJsonSerializerContext.Default.ImageGenerationOptions);
+ string json = JsonSerializer.Serialize(options, AIJsonUtilities.DefaultOptions);
- ImageGenerationOptions? deserialized = JsonSerializer.Deserialize(json, TestJsonSerializerContext.Default.ImageGenerationOptions);
+ ImageGenerationOptions? deserialized = JsonSerializer.Deserialize(json, AIJsonUtilities.DefaultOptions);
Assert.NotNull(deserialized);
Assert.Equal(ImageGenerationResponseFormat.Data, deserialized.ResponseFormat);
@@ -116,7 +118,9 @@ public void Clone_CreatesIndependentCopy()
[Theory]
[InlineData(ImageGenerationResponseFormat.Uri)]
[InlineData(ImageGenerationResponseFormat.Data)]
+#pragma warning disable MEAI001 // ImageGenerationResponseFormat.Hosted is experimental
[InlineData(ImageGenerationResponseFormat.Hosted)]
+#pragma warning restore MEAI001
public void ImageGenerationResponseFormat_Values_AreValid(ImageGenerationResponseFormat responseFormat)
{
Assert.True(Enum.IsDefined(typeof(ImageGenerationResponseFormat), responseFormat));
@@ -127,8 +131,8 @@ public void ImageGenerationResponseFormat_JsonSerialization_Roundtrips()
{
foreach (ImageGenerationResponseFormat responseFormat in Enum.GetValues(typeof(ImageGenerationResponseFormat)))
{
- string json = JsonSerializer.Serialize(responseFormat, TestJsonSerializerContext.Default.ImageGenerationResponseFormat);
- ImageGenerationResponseFormat deserialized = JsonSerializer.Deserialize(json, TestJsonSerializerContext.Default.ImageGenerationResponseFormat);
+ string json = JsonSerializer.Serialize(responseFormat, AIJsonUtilities.DefaultOptions);
+ ImageGenerationResponseFormat deserialized = JsonSerializer.Deserialize(json, AIJsonUtilities.DefaultOptions);
Assert.Equal(responseFormat, deserialized);
}
}
diff --git a/test/Libraries/Microsoft.Extensions.AI.Stabilization.Tests/Microsoft.Extensions.AI.Stabilization.Tests.csproj b/test/Libraries/Microsoft.Extensions.AI.Stabilization.Tests/Microsoft.Extensions.AI.Stabilization.Tests.csproj
index 8d96f318440..3e9945a6bf2 100644
--- a/test/Libraries/Microsoft.Extensions.AI.Stabilization.Tests/Microsoft.Extensions.AI.Stabilization.Tests.csproj
+++ b/test/Libraries/Microsoft.Extensions.AI.Stabilization.Tests/Microsoft.Extensions.AI.Stabilization.Tests.csproj
@@ -1,7 +1,7 @@
Microsoft.Extensions.AI
- Stabilization tests for ImageGeneration, CodeInterpreter, and WebSearch content types (no MEAI001 suppression).
+ Stabilization tests (no MEAI001 suppression).
@@ -22,6 +22,7 @@
+
@@ -29,6 +30,7 @@
+