WordPress\AiClient\Providers\OpenAiCompatibleImplementation
AbstractOpenAiCompatibleTextGenerationModel::parseResponseToGenerativeAiResult
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() 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);
}