![]() Server : Apache/2.4.62 (Unix) OpenSSL/1.0.2k-fips System : Linux server1.richineiserver.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 User : fdshops ( 1003) PHP Version : 8.2.21 Disable Function : NONE Directory : /home/fdshops/public_html/vendor/openai-php/client/src/Responses/ |
<?php namespace OpenAI\Responses; use Generator; use IteratorAggregate; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; /** * @template TResponse * * @implements IteratorAggregate<int, TResponse> */ final class StreamResponse implements IteratorAggregate { /** * Creates a new Stream Response instance. * * @param class-string<TResponse> $responseClass */ public function __construct( private readonly string $responseClass, private readonly ResponseInterface $response, ) { // } /** * {@inheritDoc} */ public function getIterator(): Generator { while (! $this->response->getBody()->eof()) { $line = $this->readLine($this->response->getBody()); if (! str_starts_with($line, 'data:')) { continue; } $data = trim(substr($line, strlen('data:'))); if ($data === '[DONE]') { break; } $response = json_decode($data, true, 512, JSON_THROW_ON_ERROR); yield $this->responseClass::from($response); } } /** * Read a line from the stream. */ private function readLine(StreamInterface $stream): string { $buffer = ''; while (! $stream->eof()) { if ('' === ($byte = $stream->read(1))) { return $buffer; } $buffer .= $byte; if ($byte === "\n") { break; } } return $buffer; } }