[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/php-ai-client/src/Providers/DTO/ -> ProviderModelsMetadata.php (source)

   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  }


Generated : Sat Jun 13 09:38:55 2026 Cross-referenced by PHPXref