File: AIContentExtensions.cs
Web Access
Project: src\src\Libraries\Microsoft.Extensions.AI.Evaluation.Safety\Microsoft.Extensions.AI.Evaluation.Safety.csproj (Microsoft.Extensions.AI.Evaluation.Safety)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
 
namespace Microsoft.Extensions.AI.Evaluation.Safety;
internal static class AIContentExtensions
{
    internal static bool IsTextOrUsage(this AIContent content)
        => content is TextContent || content is UsageContent;
 
    internal static bool IsImageWithSupportedFormat(this AIContent content) =>
        (content is UriContent uriContent && IsSupportedImageFormat(uriContent.MediaType)) ||
        (content is DataContent dataContent && IsSupportedImageFormat(dataContent.MediaType));
 
    internal static bool IsUriBase64Encoded(this DataContent dataContent)
    {
        ReadOnlyMemory<char> uri = dataContent.Uri.AsMemory();
 
        int commaIndex = uri.Span.IndexOf(',');
        if (commaIndex == -1)
        {
            return false;
        }
 
        ReadOnlyMemory<char> metadata = uri.Slice(0, commaIndex);
 
        bool isBase64Encoded = metadata.Span.EndsWith(";base64".AsSpan(), StringComparison.OrdinalIgnoreCase);
        return isBase64Encoded;
    }
 
    private static bool IsSupportedImageFormat(string mediaType)
    {
        // 'image/jpeg' is the official MIME type for JPEG. However, some systems recognize 'image/jpg' as well.
 
        return
            mediaType.Equals("image/jpeg", StringComparison.OrdinalIgnoreCase) ||
            mediaType.Equals("image/jpg", StringComparison.OrdinalIgnoreCase) ||
            mediaType.Equals("image/png", StringComparison.OrdinalIgnoreCase) ||
            mediaType.Equals("image/gif", StringComparison.OrdinalIgnoreCase);
    }
}