WordPress\AiClient\Builders

PromptBuilder::usingModelPreferencepublicWP 0.2.0

Sets preferred models to evaluate in order.

Method of the class: PromptBuilder{}

No Hooks.

Returns

self.

Usage

$PromptBuilder = new PromptBuilder();
$PromptBuilder->usingModelPreference( ...$preferredModels ): self;
...$preferredModels(string|ModelInterface|array{0:string,1:string}) (required)
The preferred models as model IDs, model instances, or [provider ID, model ID] tuples. For broader compatibility, it is recommended you specify only model IDs or model instances, as that will allow for different providers that expose the same model to be considered.

Changelog

Since 0.2.0 Introduced.

PromptBuilder::usingModelPreference() code WP 7.0

public function usingModelPreference(...$preferredModels): self
{
    if ($preferredModels === []) {
        throw new InvalidArgumentException('At least one model preference must be provided.');
    }
    $preferenceKeys = [];
    foreach ($preferredModels as $preferredModel) {
        if (is_array($preferredModel)) {
            // [model identifier, provider ID] tuple
            if (!array_is_list($preferredModel) || count($preferredModel) !== 2) {
                throw new InvalidArgumentException('Model preference tuple must contain model identifier and provider ID.');
            }
            [$providerId, $modelId] = $preferredModel;
            $modelId = $this->normalizePreferenceIdentifier($modelId);
            $providerId = $this->normalizePreferenceIdentifier($providerId, 'Model preference provider identifiers cannot be empty.');
            $preferenceKey = $this->createProviderModelPreferenceKey($providerId, $modelId);
        } elseif ($preferredModel instanceof ModelInterface) {
            // Model instance
            $modelId = $preferredModel->metadata()->getId();
            $providerId = $preferredModel->providerMetadata()->getId();
            $preferenceKey = $this->createProviderModelPreferenceKey($providerId, $modelId);
        } elseif (is_string($preferredModel)) {
            // Model ID
            $modelId = $this->normalizePreferenceIdentifier($preferredModel);
            $preferenceKey = $this->createModelPreferenceKey($modelId);
        } else {
            // Invalid type
            throw new InvalidArgumentException('Model preferences must be model identifiers, instances of ModelInterface, ' . 'or provider/model tuples.');
        }
        $preferenceKeys[] = $preferenceKey;
    }
    $this->modelPreferenceKeys = $preferenceKeys;
    return $this;
}