|
6 | 6 |
|
7 | 7 | use InvalidArgumentException;
|
8 | 8 | use WordPress\AiClient\Common\AbstractDataTransferObject;
|
| 9 | +use WordPress\AiClient\Files\Enums\FileTypeEnum; |
9 | 10 | use WordPress\AiClient\Messages\Enums\ModalityEnum;
|
10 | 11 | use WordPress\AiClient\Tools\DTO\Tool;
|
11 | 12 |
|
@@ -56,6 +57,7 @@ class ModelConfig extends AbstractDataTransferObject
|
56 | 57 | public const KEY_LOGPROBS = 'logprobs';
|
57 | 58 | public const KEY_TOP_LOGPROBS = 'topLogprobs';
|
58 | 59 | public const KEY_TOOLS = 'tools';
|
| 60 | + public const KEY_OUTPUT_FILE_TYPE = 'outputFileType'; |
59 | 61 | public const KEY_OUTPUT_MIME_TYPE = 'outputMimeType';
|
60 | 62 | public const KEY_OUTPUT_SCHEMA = 'outputSchema';
|
61 | 63 | public const KEY_CUSTOM_OPTIONS = 'customOptions';
|
@@ -125,6 +127,11 @@ class ModelConfig extends AbstractDataTransferObject
|
125 | 127 | */
|
126 | 128 | protected ?array $tools = null;
|
127 | 129 |
|
| 130 | + /** |
| 131 | + * @var FileTypeEnum|null Output file type. |
| 132 | + */ |
| 133 | + protected ?FileTypeEnum $outputFileType = null; |
| 134 | + |
128 | 135 | /**
|
129 | 136 | * @var string|null Output MIME type.
|
130 | 137 | */
|
@@ -470,6 +477,30 @@ public function getTools(): ?array
|
470 | 477 | return $this->tools;
|
471 | 478 | }
|
472 | 479 |
|
| 480 | + /** |
| 481 | + * Sets the output file type. |
| 482 | + * |
| 483 | + * @since n.e.x.t |
| 484 | + * |
| 485 | + * @param FileTypeEnum $outputFileType The output file type. |
| 486 | + */ |
| 487 | + public function setOutputFileType(FileTypeEnum $outputFileType): void |
| 488 | + { |
| 489 | + $this->outputFileType = $outputFileType; |
| 490 | + } |
| 491 | + |
| 492 | + /** |
| 493 | + * Gets the output file type. |
| 494 | + * |
| 495 | + * @since n.e.x.t |
| 496 | + * |
| 497 | + * @return FileTypeEnum|null The output file type. |
| 498 | + */ |
| 499 | + public function getOutputFileType(): ?FileTypeEnum |
| 500 | + { |
| 501 | + return $this->outputFileType; |
| 502 | + } |
| 503 | + |
473 | 504 | /**
|
474 | 505 | * Sets the output MIME type.
|
475 | 506 | *
|
@@ -641,6 +672,11 @@ public static function getJsonSchema(): array
|
641 | 672 | 'items' => Tool::getJsonSchema(),
|
642 | 673 | 'description' => 'Tools available to the model.',
|
643 | 674 | ],
|
| 675 | + self::KEY_OUTPUT_FILE_TYPE => [ |
| 676 | + 'type' => 'string', |
| 677 | + 'enum' => FileTypeEnum::getValues(), |
| 678 | + 'description' => 'Output file type.', |
| 679 | + ], |
644 | 680 | self::KEY_OUTPUT_MIME_TYPE => [
|
645 | 681 | 'type' => 'string',
|
646 | 682 | 'description' => 'Output MIME type.',
|
@@ -730,6 +766,10 @@ static function (ModalityEnum $modality): string {
|
730 | 766 | }, $this->tools);
|
731 | 767 | }
|
732 | 768 |
|
| 769 | + if ($this->outputFileType !== null) { |
| 770 | + $data[self::KEY_OUTPUT_FILE_TYPE] = $this->outputFileType->value; |
| 771 | + } |
| 772 | + |
733 | 773 | if ($this->outputMimeType !== null) {
|
734 | 774 | $data[self::KEY_OUTPUT_MIME_TYPE] = $this->outputMimeType;
|
735 | 775 | }
|
@@ -809,6 +849,15 @@ public static function fromArray(array $array): self
|
809 | 849 | }, $array[self::KEY_TOOLS]));
|
810 | 850 | }
|
811 | 851 |
|
| 852 | + if (isset($array[self::KEY_OUTPUT_FILE_TYPE])) { |
| 853 | + if (!is_string($array[self::KEY_OUTPUT_FILE_TYPE])) { |
| 854 | + throw new InvalidArgumentException( |
| 855 | + 'Output file type must be a string.' |
| 856 | + ); |
| 857 | + } |
| 858 | + $config->setOutputFileType(FileTypeEnum::from($array[self::KEY_OUTPUT_FILE_TYPE])); |
| 859 | + } |
| 860 | + |
812 | 861 | if (isset($array[self::KEY_OUTPUT_MIME_TYPE])) {
|
813 | 862 | $config->setOutputMimeType($array[self::KEY_OUTPUT_MIME_TYPE]);
|
814 | 863 | }
|
|
0 commit comments