40
40
* outputMimeType?: string,
41
41
* outputSchema?: array<string, mixed>,
42
42
* outputMediaOrientation?: string,
43
+ * outputMediaAspectRatio?: string,
43
44
* customOptions?: array<string, mixed>
44
45
* }
45
46
*
@@ -64,6 +65,7 @@ class ModelConfig extends AbstractDataTransferObject
64
65
public const KEY_OUTPUT_MIME_TYPE = 'outputMimeType ' ;
65
66
public const KEY_OUTPUT_SCHEMA = 'outputSchema ' ;
66
67
public const KEY_OUTPUT_MEDIA_ORIENTATION = 'outputMediaOrientation ' ;
68
+ public const KEY_OUTPUT_MEDIA_ASPECT_RATIO = 'outputMediaAspectRatio ' ;
67
69
public const KEY_CUSTOM_OPTIONS = 'customOptions ' ;
68
70
69
71
/**
@@ -151,6 +153,11 @@ class ModelConfig extends AbstractDataTransferObject
151
153
*/
152
154
protected ?MediaOrientationEnum $ outputMediaOrientation = null ;
153
155
156
+ /**
157
+ * @var string|null Output media aspect ratio (e.g. 3:2, 16:9).
158
+ */
159
+ protected ?string $ outputMediaAspectRatio = null ;
160
+
154
161
/**
155
162
* @var array<string, mixed> Custom provider-specific options.
156
163
*/
@@ -590,6 +597,37 @@ public function getOutputMediaOrientation(): ?MediaOrientationEnum
590
597
return $ this ->outputMediaOrientation ;
591
598
}
592
599
600
+ /**
601
+ * Sets the output media aspect ratio.
602
+ *
603
+ * If set, this supersedes the output media orientation, as it is a more specific configuration.
604
+ *
605
+ * @since n.e.x.t
606
+ *
607
+ * @param string $outputMediaAspectRatio The output media aspect ratio (e.g. 3:2, 16:9).
608
+ */
609
+ public function setOutputMediaAspectRatio (string $ outputMediaAspectRatio ): void
610
+ {
611
+ if (!preg_match ('/^\d+:\d+$/ ' , $ outputMediaAspectRatio )) {
612
+ throw new InvalidArgumentException (
613
+ 'Output media aspect ratio must be in the format "width:height" (e.g. 3:2, 16:9). '
614
+ );
615
+ }
616
+ $ this ->outputMediaAspectRatio = $ outputMediaAspectRatio ;
617
+ }
618
+
619
+ /**
620
+ * Gets the output media aspect ratio.
621
+ *
622
+ * @since n.e.x.t
623
+ *
624
+ * @return string|null The output media aspect ratio (e.g. 3:2, 16:9).
625
+ */
626
+ public function getOutputMediaAspectRatio (): ?string
627
+ {
628
+ return $ this ->outputMediaAspectRatio ;
629
+ }
630
+
593
631
/**
594
632
* Sets a single custom option.
595
633
*
@@ -724,6 +762,11 @@ public static function getJsonSchema(): array
724
762
'enum ' => MediaOrientationEnum::getValues (),
725
763
'description ' => 'Output media orientation. ' ,
726
764
],
765
+ self ::KEY_OUTPUT_MEDIA_ASPECT_RATIO => [
766
+ 'type ' => 'string ' ,
767
+ 'pattern ' => '^\d+:\d+$ ' ,
768
+ 'description ' => 'Output media aspect ratio. ' ,
769
+ ],
727
770
self ::KEY_CUSTOM_OPTIONS => [
728
771
'type ' => 'object ' ,
729
772
'additionalProperties ' => true ,
@@ -820,6 +863,10 @@ static function (ModalityEnum $modality): string {
820
863
$ data [self ::KEY_OUTPUT_MEDIA_ORIENTATION ] = $ this ->outputMediaOrientation ->value ;
821
864
}
822
865
866
+ if ($ this ->outputMediaAspectRatio !== null ) {
867
+ $ data [self ::KEY_OUTPUT_MEDIA_ASPECT_RATIO ] = $ this ->outputMediaAspectRatio ;
868
+ }
869
+
823
870
$ data [self ::KEY_CUSTOM_OPTIONS ] = $ this ->customOptions ;
824
871
825
872
return $ data ;
@@ -907,6 +954,10 @@ public static function fromArray(array $array): self
907
954
$ config ->setOutputMediaOrientation (MediaOrientationEnum::from ($ array [self ::KEY_OUTPUT_MEDIA_ORIENTATION ]));
908
955
}
909
956
957
+ if (isset ($ array [self ::KEY_OUTPUT_MEDIA_ASPECT_RATIO ])) {
958
+ $ config ->setOutputMediaAspectRatio ($ array [self ::KEY_OUTPUT_MEDIA_ASPECT_RATIO ]);
959
+ }
960
+
910
961
if (isset ($ array [self ::KEY_CUSTOM_OPTIONS ])) {
911
962
$ config ->setCustomOptions ($ array [self ::KEY_CUSTOM_OPTIONS ]);
912
963
}
0 commit comments