using Microsoft.TypeSpec.Generator.Customizations;
using System;
namespace OpenAI.Chat;
[CodeGenType("ChatCompletionRequestMessageContentPartImageImageUrl")]
[CodeGenSuppress("InternalChatCompletionRequestMessageContentPartImageImageUrl", typeof(string))]
internal partial class InternalChatCompletionRequestMessageContentPartImageImageUrl
{
private Uri _imageUri;
private BinaryData _imageBytes;
private string _imageBytesMediaType;
// CUSTOM: Changed type from Uri to string to be able to support data URIs properly.
/// Either a URL of the image or the base64 encoded image data.
[CodeGenMember("Url")]
internal string InternalUrl
{
get => _internalUrl;
set
{
_internalUrl = value;
if (value is not null && !DataEncodingHelpers.TryParseDataUri(value, out _imageBytes, out _imageBytesMediaType))
{
_imageUri = new Uri(value);
}
}
}
private string _internalUrl;
/// Initializes a new instance of .
/// Either a URL of the image or the base64 encoded image data.
/// is null.
public InternalChatCompletionRequestMessageContentPartImageImageUrl(Uri uri, ChatImageDetailLevel? detailLevel = default)
: this(null, detailLevel, default)
{
Argument.AssertNotNull(uri, nameof(uri));
_imageUri = uri;
_internalUrl = uri.AbsoluteUri;
}
public InternalChatCompletionRequestMessageContentPartImageImageUrl(BinaryData imageBytes, string imageBytesMediaType, ChatImageDetailLevel? detailLevel = default)
: this(null, detailLevel, default)
{
Argument.AssertNotNull(imageBytes, nameof(imageBytes));
Argument.AssertNotNull(imageBytesMediaType, nameof(imageBytesMediaType));
_imageBytes = imageBytes;
_imageBytesMediaType = imageBytesMediaType;
_internalUrl = DataEncodingHelpers.CreateDataUri(imageBytes, imageBytesMediaType);
}
public Uri ImageUri => _imageUri;
public BinaryData ImageBytes => _imageBytes;
public string ImageBytesMediaType => _imageBytesMediaType;
}