WordPress\AiClient\Providers\OpenAiCompatibleImplementation

AbstractOpenAiCompatibleImageGenerationModel::parseResponseToGenerativeAiResultprotectedWP 0.1.0

Parses the response from the API endpoint to a generative AI result.

Method of the class: AbstractOpenAiCompatibleImageGenerationModel{}

No Hooks.

Returns

GenerativeAiResult. The parsed generative AI result.

Usage

// protected - for code of main (parent) or child class
$result = $this->parseResponseToGenerativeAiResult( $response, $expectedMimeType ): GenerativeAiResult;
$response(Response) (required)
The response from the API endpoint.
$expectedMimeType(string)
The expected MIME type the response is in.
Default: 'image/png'

Changelog

Since 0.1.0 Introduced.

AbstractOpenAiCompatibleImageGenerationModel::parseResponseToGenerativeAiResult() code WP 7.0

protected function parseResponseToGenerativeAiResult(Response $response, string $expectedMimeType = 'image/png'): GenerativeAiResult
{
    /** @var ResponseData $responseData */
    $responseData = $response->getData();
    if (!isset($responseData['data']) || !$responseData['data']) {
        throw ResponseException::fromMissingData($this->providerMetadata()->getName(), 'data');
    }
    if (!is_array($responseData['data'])) {
        throw ResponseException::fromInvalidData($this->providerMetadata()->getName(), 'data', 'The value must be an array.');
    }
    $candidates = [];
    foreach ($responseData['data'] as $index => $choiceData) {
        if (!is_array($choiceData) || array_is_list($choiceData)) {
            throw ResponseException::fromInvalidData($this->providerMetadata()->getName(), "data[{$index}]", 'The value must be an associative array.');
        }
        $candidates[] = $this->parseResponseChoiceToCandidate($choiceData, $index, $expectedMimeType);
    }
    $id = $this->getResultId($responseData);
    if (isset($responseData['usage']) && is_array($responseData['usage'])) {
        $usage = $responseData['usage'];
        $tokenUsage = new TokenUsage($usage['input_tokens'] ?? 0, $usage['output_tokens'] ?? 0, $usage['total_tokens'] ?? 0);
    } else {
        $tokenUsage = new TokenUsage(0, 0, 0);
    }
    // Use any other data from the response as provider-specific response metadata.
    $providerMetadata = $responseData;
    unset($providerMetadata['id'], $providerMetadata['data'], $providerMetadata['usage']);
    return new GenerativeAiResult($id, $candidates, $tokenUsage, $this->providerMetadata(), $this->metadata(), $providerMetadata);
}