ModelRequirements::fromPromptData( WordPressAiClientProvidersModelsEnumsCapabilityEnum $capability, WordPressAiClientProvidersModelsDTOlist $messages, WordPressAiClientProvidersModelsDTOModelConfig $modelConfig ): self

In this article

Creates ModelRequirements from prompt data and model configuration.

Parameters

$capabilityWordPressAiClientProvidersModelsEnumsCapabilityEnumrequired
The capability the model must support.
$messages<span class="WordPressAiClientProvidersModelsDTOlist”>WordPressAiClientProvidersModelsDTOlistrequired
The messages in the conversation.
$modelConfigWordPressAiClientProvidersModelsDTOModelConfigrequired
The model configuration.

Return

self The created requirements.

Source

public static function fromPromptData(CapabilityEnum $capability, array $messages, \WordPress\AiClient\Providers\Models\DTO\ModelConfig $modelConfig): self
{
    // Start with base capability
    $capabilities = [$capability];
    $inputModalities = [];
    // Check if we have chat history (multiple messages)
    if (count($messages) > 1) {
        $capabilities[] = CapabilityEnum::chatHistory();
    }
    // Analyze all messages to determine required input modalities
    $hasFunctionMessageParts = \false;
    foreach ($messages as $message) {
        foreach ($message->getParts() as $part) {
            // Check for text input
            if ($part->getType()->isText()) {
                $inputModalities[] = ModalityEnum::text();
            }
            // Check for file inputs
            if ($part->getType()->isFile()) {
                $file = $part->getFile();
                if ($file !== null) {
                    if ($file->isImage()) {
                        $inputModalities[] = ModalityEnum::image();
                    } elseif ($file->isAudio()) {
                        $inputModalities[] = ModalityEnum::audio();
                    } elseif ($file->isVideo()) {
                        $inputModalities[] = ModalityEnum::video();
                    } elseif ($file->isDocument() || $file->isText()) {
                        $inputModalities[] = ModalityEnum::document();
                    }
                }
            }
            // Check for function calls/responses (these might require special capabilities)
            if ($part->getType()->isFunctionCall() || $part->getType()->isFunctionResponse()) {
                $hasFunctionMessageParts = \true;
            }
        }
    }
    // Convert ModelConfig to RequiredOptions
    $requiredOptions = self::toRequiredOptions($modelConfig);
    // Add additional options based on message analysis
    if ($hasFunctionMessageParts) {
        $requiredOptions = self::includeInRequiredOptions($requiredOptions, new \WordPress\AiClient\Providers\Models\DTO\RequiredOption(OptionEnum::functionDeclarations(), \true));
    }
    // Add input modalities if we have any inputs
    if (!empty($inputModalities)) {
        // Remove duplicates
        $inputModalities = array_unique($inputModalities, \SORT_REGULAR);
        $requiredOptions = self::includeInRequiredOptions($requiredOptions, new \WordPress\AiClient\Providers\Models\DTO\RequiredOption(OptionEnum::inputModalities(), array_values($inputModalities)));
    }
    // Step 6: Return new ModelRequirements
    return new self($capabilities, $requiredOptions);
}

Changelog

VersionDescription
0.2.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.