| [ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 <?php 2 3 declare (strict_types=1); 4 namespace WordPress\AiClient\Providers\DTO; 5 6 use WordPress\AiClient\Common\AbstractDataTransferObject; 7 use WordPress\AiClient\Common\Exception\InvalidArgumentException; 8 use WordPress\AiClient\Providers\Models\DTO\ModelMetadata; 9 /** 10 * Represents metadata about a provider and its available models. 11 * 12 * This class combines provider information with the models that 13 * the provider offers, facilitating model discovery and selection. 14 * 15 * @since 0.1.0 16 * 17 * @phpstan-import-type ProviderMetadataArrayShape from ProviderMetadata 18 * @phpstan-import-type ModelMetadataArrayShape from ModelMetadata 19 * 20 * @phpstan-type ProviderModelsMetadataArrayShape array{ 21 * provider: ProviderMetadataArrayShape, 22 * models: list<ModelMetadataArrayShape> 23 * } 24 * 25 * @extends AbstractDataTransferObject<ProviderModelsMetadataArrayShape> 26 */ 27 class ProviderModelsMetadata extends AbstractDataTransferObject 28 { 29 public const KEY_PROVIDER = 'provider'; 30 public const KEY_MODELS = 'models'; 31 /** 32 * @var ProviderMetadata The provider metadata. 33 */ 34 protected \WordPress\AiClient\Providers\DTO\ProviderMetadata $provider; 35 /** 36 * @var list<ModelMetadata> The available models. 37 */ 38 protected array $models; 39 /** 40 * Constructor. 41 * 42 * @since 0.1.0 43 * 44 * @param ProviderMetadata $provider The provider metadata. 45 * @param list<ModelMetadata> $models The available models. 46 * 47 * @throws InvalidArgumentException If models is not a list. 48 */ 49 public function __construct(\WordPress\AiClient\Providers\DTO\ProviderMetadata $provider, array $models) 50 { 51 if (!array_is_list($models)) { 52 throw new InvalidArgumentException('Models must be a list array.'); 53 } 54 $this->provider = $provider; 55 $this->models = $models; 56 } 57 /** 58 * Creates a deep clone of this metadata. 59 * 60 * Clones the provider metadata and all model metadata objects 61 * to ensure the cloned instance is independent of the original. 62 * 63 * @since 0.4.2 64 */ 65 public function __clone() 66 { 67 // Clone provider metadata 68 $this->provider = clone $this->provider; 69 // Deep clone models array (ModelMetadata has __clone) 70 $clonedModels = []; 71 foreach ($this->models as $model) { 72 $clonedModels[] = clone $model; 73 } 74 $this->models = $clonedModels; 75 } 76 /** 77 * Gets the provider metadata. 78 * 79 * @since 0.1.0 80 * 81 * @return ProviderMetadata The provider metadata. 82 */ 83 public function getProvider(): \WordPress\AiClient\Providers\DTO\ProviderMetadata 84 { 85 return $this->provider; 86 } 87 /** 88 * Gets the available models. 89 * 90 * @since 0.1.0 91 * 92 * @return list<ModelMetadata> The available models. 93 */ 94 public function getModels(): array 95 { 96 return $this->models; 97 } 98 /** 99 * {@inheritDoc} 100 * 101 * @since 0.1.0 102 */ 103 public static function getJsonSchema(): array 104 { 105 return ['type' => 'object', 'properties' => [self::KEY_PROVIDER => \WordPress\AiClient\Providers\DTO\ProviderMetadata::getJsonSchema(), self::KEY_MODELS => ['type' => 'array', 'items' => ModelMetadata::getJsonSchema(), 'description' => 'The available models for this provider.']], 'required' => [self::KEY_PROVIDER, self::KEY_MODELS]]; 106 } 107 /** 108 * {@inheritDoc} 109 * 110 * @since 0.1.0 111 * 112 * @return ProviderModelsMetadataArrayShape 113 */ 114 public function toArray(): array 115 { 116 return [self::KEY_PROVIDER => $this->provider->toArray(), self::KEY_MODELS => array_map(static fn(ModelMetadata $model): array => $model->toArray(), $this->models)]; 117 } 118 /** 119 * {@inheritDoc} 120 * 121 * @since 0.1.0 122 */ 123 public static function fromArray(array $array): self 124 { 125 static::validateFromArrayData($array, [self::KEY_PROVIDER, self::KEY_MODELS]); 126 return new self(\WordPress\AiClient\Providers\DTO\ProviderMetadata::fromArray($array[self::KEY_PROVIDER]), array_map(static fn(array $modelData): ModelMetadata => ModelMetadata::fromArray($modelData), $array[self::KEY_MODELS])); 127 } 128 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Sat Jun 13 09:38:55 2026 | Cross-referenced by PHPXref |