Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/GenerativeAI.Microsoft/AdditionalPropertyKeys.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,19 @@ public static class AdditionalPropertiesKeys
/// Key used to specify the aspect ratio for image generation.
/// </summary>
public const string ImageConfigAspectRatio = "AspectRatio";

/// <summary>
/// Key used to specify the output resolution for image generation ("1K", "2K", "4K").
/// </summary>
public const string ImageConfigImageSize = "ImageSize";

/// <summary>
/// Key used to specify the output MIME type for image generation ("image/png", "image/jpeg").
/// </summary>
public const string ImageOutputOptionsMimeType = "MimeType";

/// <summary>
/// Key used to specify the compression quality for image generation (0-100).
/// </summary>
public const string ImageOutputOptionsCompressionQuality = "CompressionQuality";
}
20 changes: 20 additions & 0 deletions src/GenerativeAI.Microsoft/Extensions/MicrosoftExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,26 @@ private static JsonNode ToJsonNodeResponse(this object? response)
config.ImageConfig.AspectRatio = aspectRatio;
}

if (options.AdditionalProperties.TryGetValue(AdditionalPropertiesKeys.ImageConfigImageSize, out string? imageSize))
{
config.ImageConfig ??= new ImageConfig();
config.ImageConfig.ImageSize = imageSize;
}

if (options.AdditionalProperties.TryGetValue(AdditionalPropertiesKeys.ImageOutputOptionsMimeType, out string? mimeType))
{
config.ImageConfig ??= new ImageConfig();
config.ImageConfig.ImageOutputOptions ??= new ImageOutputOptions();
config.ImageConfig.ImageOutputOptions.MimeType = mimeType;
}

if (options.AdditionalProperties.TryGetValue(AdditionalPropertiesKeys.ImageOutputOptionsCompressionQuality, out int compressionQuality))
{
config.ImageConfig ??= new ImageConfig();
config.ImageConfig.ImageOutputOptions ??= new ImageOutputOptions();
config.ImageConfig.ImageOutputOptions.CompressionQuality = compressionQuality;
}

return config;
}

Expand Down
59 changes: 59 additions & 0 deletions src/GenerativeAI/Constants/ImageConfigValues.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
namespace GenerativeAI;

/// <summary>
/// Provides common values for image generation configuration.
/// These constants are provided for convenience and discoverability but are not restrictive;
/// any valid string value accepted by the API can be used.
/// </summary>
/// <seealso href="https://ai.google.dev/gemini-api/docs/image-generation">See Official API Documentation</seealso>
public static class ImageConfigValues
{
/// <summary>
/// Common aspect ratios for image generation.
/// </summary>
public static class AspectRatios
{
/// <summary>Square aspect ratio (1:1).</summary>
public const string Square = "1:1";

/// <summary>Landscape aspect ratio (16:9), common for widescreen displays.</summary>
public const string Landscape16x9 = "16:9";

/// <summary>Portrait aspect ratio (9:16), common for mobile/vertical displays.</summary>
public const string Portrait9x16 = "9:16";

/// <summary>Landscape aspect ratio (4:3), traditional display format.</summary>
public const string Landscape4x3 = "4:3";

/// <summary>Portrait aspect ratio (3:4).</summary>
public const string Portrait3x4 = "3:4";
}

/// <summary>
/// Output resolutions for image generation.
/// Only supported on certain models like gemini-3-pro-image-preview.
/// </summary>
public static class ImageSizes
{
/// <summary>1K resolution output.</summary>
public const string Size1K = "1K";

/// <summary>2K resolution output.</summary>
public const string Size2K = "2K";

/// <summary>4K resolution output.</summary>
public const string Size4K = "4K";
}

/// <summary>
/// Output MIME types for generated images.
/// </summary>
public static class OutputMimeTypes
{
/// <summary>PNG format (lossless compression). This is the default.</summary>
public const string Png = "image/png";

/// <summary>JPEG format (lossy compression, supports compression quality setting).</summary>
public const string Jpeg = "image/jpeg";
}
}
87 changes: 71 additions & 16 deletions src/GenerativeAI/Types/ContentGeneration/Config/GenerationConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ public class GenerationConfig
/// </summary>
[JsonPropertyName("speechConfig")]
public SpeechConfig? SpeechConfig { get; set; }

/// <summary>
/// Optional. Config for thinking features.
/// An error will be returned if this field is set for models that don't support thinking.
Expand All @@ -178,13 +178,13 @@ public class GenerationConfig
/// </summary>
[JsonPropertyName("mediaResolution")]
public MediaResolution? MediaResolution { get; set; }

/// <summary>
/// Optional. If enabled, audio timestamp will be included in the request to the model.
/// </summary>
[JsonPropertyName("audioTimestamp")]
public bool? AudioTimestamp { get; set; }

/// <summary>
/// Optional. Routing configuration.
/// </summary>
Expand Down Expand Up @@ -228,7 +228,7 @@ public class ThinkingConfig
/// </summary>
[JsonPropertyName("includeThoughts")]
public bool? IncludeThoughts { get; set; }

/// <summary>
/// Indicates the thinking budget in tokens
/// </summary>
Expand Down Expand Up @@ -279,7 +279,7 @@ public class RoutingConfig
}

/// <summary>
/// When automated routing is specified, the routing will be determined by the pretrained routing model
/// When automated routing is specified, the routing will be determined by the pretrained routing model
/// and customer provided model routing preference.
/// </summary>
public class AutoRoutingMode
Expand Down Expand Up @@ -329,14 +329,69 @@ public class ManualRoutingMode
public string? ModelName { get; set; }
}

/// <summary>
/// Configuration for image generation in models that support image output (e.g., gemini-2.5-flash-image).
/// </summary>
public class ImageConfig
{
/// <summary>
/// Optional. The aspect ratio for generated images. Common values: "16:9", "9:16", "1:1", "4:3", "3:4".
/// </summary>
[JsonPropertyName("aspectRatio")]
public string? AspectRatio { get; set; }
}
/// <summary>
/// Configuration for image generation in models that support image output (e.g., gemini-2.5-flash-image, gemini-3-pro-image-preview).
/// </summary>
/// <remarks>
/// Use <see cref="ImageConfigValues"/> for common predefined values.
/// </remarks>
/// <seealso href="https://ai.google.dev/gemini-api/docs/image-generation">See Official API Documentation</seealso>
public class ImageConfig
{
/// <summary>
/// Optional. The aspect ratio for generated images.
/// </summary>
/// <remarks>
/// Common values include "1:1" (square), "16:9" (landscape), "9:16" (portrait), "4:3", and "3:4".
/// See <see cref="ImageConfigValues.AspectRatios"/> for predefined constants.
/// </remarks>
[JsonPropertyName("aspectRatio")]
public string? AspectRatio { get; set; }

/// <summary>
/// Optional. The output resolution for generated images.
/// </summary>
/// <remarks>
/// Values: "1K", "2K", "4K". Only supported on certain models like gemini-3-pro-image-preview.
/// See <see cref="ImageConfigValues.ImageSizes"/> for predefined constants.
/// </remarks>
[JsonPropertyName("imageSize")]
public string? ImageSize { get; set; }

/// <summary>
/// Optional. The image output options for generated images.
/// </summary>
/// <remarks>
/// Only supported on certain models like gemini-3-pro-image-preview.
/// </remarks>
[JsonPropertyName("imageOutputOptions")]
public ImageOutputOptions? ImageOutputOptions { get; set; }
}

/// <summary>
/// The image output format for generated images.
/// </summary>
/// <remarks>
/// See <see cref="ImageConfigValues.OutputMimeTypes"/> for predefined MIME type constants.
/// </remarks>
public class ImageOutputOptions
{
/// <summary>
/// Optional. The image format that the output should be saved as.
/// </summary>
/// <remarks>
/// Default is "image/png". Supported values: "image/png", "image/jpeg".
/// See <see cref="ImageConfigValues.OutputMimeTypes"/> for predefined constants.
/// </remarks>
[JsonPropertyName("mimeType")]
public string? MimeType { get; set; }

/// <summary>
/// Optional. The compression quality of the output image (0-100).
/// </summary>
/// <remarks>
/// Only applicable when <see cref="MimeType"/> is "image/jpeg". Default is 75.
/// </remarks>
[JsonPropertyName("compressionQuality")]
public int? CompressionQuality { get; set; }
}
2 changes: 2 additions & 0 deletions src/GenerativeAI/Types/TypesSerializerContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ namespace GenerativeAI.Types;
[JsonSerializable(typeof(GoogleTypeDate))]
[JsonSerializable(typeof(Schema))]
[JsonSerializable(typeof(GenerationConfig))]
[JsonSerializable(typeof(ImageConfig))]
[JsonSerializable(typeof(ImageOutputOptions))]
[JsonSerializable(typeof(ModelSelectionConfig))]
[JsonSerializable(typeof(FeatureSelectionPreference))]
[JsonSerializable(typeof(PrebuiltVoiceConfig))]
Expand Down
Loading