*/ private $modelType; public function __construct(?Client $client = null) { $this->client = $client ?? Manager::access(); } /** * Get status updates for a fine-tuning job. * * Operation URL: GET /fine_tuning/jobs/{fine_tuning_job_id}/events * Operation ID: listFineTuningEvents * * @param string $fineTuningJobId The ID of the fine-tuning job to get events for. * @param array $queryParams * - after: Identifier for the last event from the previous pagination request. * - limit: Number of events to retrieve. * * @api * @return self */ public function listFineTuning($fineTuningJobId, $queryParams = []): self { $url = sprintf('/fine_tuning/jobs/%s/events', $fineTuningJobId); $this->setRequest($this->client->get( $url, null, [], $queryParams )); $this->modelType = ListFineTuningResponse::class; return $this; } /** * Convert response body to an array. * * @return array * @throws ClientException */ private function parseResponse(ResponseInterface $response): array { $contentType = \strtolower($response->getHeaderLine('Content-Type')); if (substr($contentType, 0, 16) !== 'application/json' && \strlen($contentType) !== 0) { throw new ClientException(\sprintf('Unsupported content type: %s', $contentType)); } $body = (string) $response->getBody(); $body = \strlen($body) === 0 ? '[]' : $body; $data = (array) \json_decode($body, true); if (\json_last_error()) { throw new ClientException( 'Failed to parse JSON response body: ' . \json_last_error_msg() ); } return $data; } /** * Sets the PSR 7 Response object. * Also removes the previous response. * * @param RequestInterface $request * * @return void */ private function setRequest(RequestInterface $request): void { $this->request = $request; $this->response = null; } /** * Returns the PSR 7 Response object. * * @internal * @return RequestInterface * @throws ClientException */ public function getRequest(): RequestInterface { if (\is_null($this->request)) { throw new ClientException('Request not configured.'); } return $this->request; } /** * Returns the PSR 7 Response object. * * @api * @return ResponseInterface */ public function getResponse(): ResponseInterface { if (!\is_null($this->response)) { return $this->response; } $this->response = $this->client->sendRequest($this->getRequest()); $this->request = null; return $this->response; } /** * Returns the response body as a model/DTO. * * @api * @return AbstractModel|AbstractModelCollection * @throws ClientException if an unsuccessful HTTP response occurs. * @throws ClientException if the response body cannot be parsed. */ public function toModel(): object { if ($this->getResponse()->getStatusCode() < 200 || $this->getResponse()->getStatusCode() >= 300) { throw new ClientException( \sprintf( 'Unsuccessful response. HTTP status code: %s (%s).', $this->getResponse()->getStatusCode(), $this->getResponse()->getReasonPhrase() ) ); } $class = $this->modelType; try { return new $class($this->parseResponse($this->getResponse())); } catch (Throwable $e) { throw new ClientException( 'Response body parse failed. See previous exception for details.', 0, $e ); } } /** * Returns the response body as an associative array. * * @api * @return array */ public function toArray(): array { return $this->parseResponse($this->getResponse()); } }