WordPress\AiClient\Providers\OpenAiCompatibleImplementation

AbstractOpenAiCompatibleTextGenerationModel::parseResponseToGenerativeAiResultprotectedWP 0.1.0

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

Method of the class: AbstractOpenAiCompatibleTextGenerationModel{}

No Hooks.

Returns

GenerativeAiResult. The parsed generative AI result.

Usage

// protected - for code of main (parent) or child class
$result = $this->parseResponseToGenerativeAiResult( $response ): GenerativeAiResult;
$response(Response) (required)
The response from the API endpoint.

Changelog

Since 0.1.0 Introduced.

AbstractOpenAiCompatibleTextGenerationModel::parseResponseToGenerativeAiResult() code WP 7.0

protected function parseResponseToGenerativeAiResult(Response $response): GenerativeAiResult
{
    /** @var ResponseData $responseData */
    $responseData = $response->getData();
    if (!isset($responseData['choices']) || !$responseData['choices']) {
        throw ResponseException::fromMissingData($this->providerMetadata()->getName(), 'choices');
    }
    if (!is_array($responseData['choices'])) {
        throw ResponseException::fromInvalidData($this->providerMetadata()->getName(), 'choices', 'The value must be an array.');
    }
    $candidates = [];
    foreach ($responseData['choices'] as $index => $choiceData) {
        if (!is_array($choiceData) || array_is_list($choiceData)) {
            throw ResponseException::fromInvalidData($this->providerMetadata()->getName(), "choices[{$index}]", 'The value must be an associative array.');
        }
        $candidates[] = $this->parseResponseChoiceToCandidate($choiceData, $index);
    }
    $id = isset($responseData['id']) && is_string($responseData['id']) ? $responseData['id'] : '';
    if (isset($responseData['usage']) && is_array($responseData['usage'])) {
        $usage = $responseData['usage'];
        $tokenUsage = new TokenUsage($usage['prompt_tokens'] ?? 0, $usage['completion_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.
    $additionalData = $responseData;
    unset($additionalData['id'], $additionalData['choices'], $additionalData['usage']);
    return new GenerativeAiResult($id, $candidates, $tokenUsage, $this->providerMetadata(), $this->metadata(), $additionalData);
}