From e2ec9b6de4ad3631b8312af0a7cda5751e379b21 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Wed, 6 Dec 2023 16:18:58 +0100 Subject: [PATCH] Add @throws annotation --- phpstan.neon.dist | 9 ++++++ .../Resources/AssistantsContract.php | 13 +++++++++ .../Resources/AssistantsFilesContract.php | 9 ++++++ src/Contracts/Resources/AudioContract.php | 9 ++++++ src/Contracts/Resources/ChatContract.php | 5 ++++ .../Resources/CompletionsContract.php | 5 ++++ src/Contracts/Resources/EditsContract.php | 3 ++ .../Resources/EmbeddingsContract.php | 3 ++ src/Contracts/Resources/FilesContract.php | 11 +++++++ src/Contracts/Resources/FineTunesContract.php | 13 +++++++++ .../Resources/FineTuningContract.php | 11 +++++++ src/Contracts/Resources/ImagesContract.php | 7 +++++ src/Contracts/Resources/ModelsContract.php | 7 +++++ .../Resources/ModerationsContract.php | 3 ++ src/Contracts/Resources/ThreadsContract.php | 11 +++++++ .../Resources/ThreadsMessagesContract.php | 9 ++++++ .../ThreadsMessagesFilesContract.php | 5 ++++ .../Resources/ThreadsRunsContract.php | 3 ++ .../Resources/ThreadsRunsStepsContract.php | 5 ++++ src/Contracts/TransporterContract.php | 8 +++-- src/Exceptions/ErrorException.php | 2 +- src/Exceptions/InvalidArgumentException.php | 2 +- src/Exceptions/OpenAIThrowable.php | 9 ++++++ src/Exceptions/TransporterException.php | 2 +- src/Exceptions/UnreadableResponse.php | 19 ++++++++++++ src/Exceptions/UnserializableResponse.php | 2 +- src/Resources/Assistants.php | 11 +++++++ src/Resources/AssistantsFiles.php | 9 ++++++ src/Resources/Audio.php | 9 ++++++ src/Resources/Chat.php | 5 ++++ src/Resources/Completions.php | 5 ++++ src/Resources/Concerns/Streamable.php | 2 ++ src/Resources/Edits.php | 3 ++ src/Resources/Embeddings.php | 3 ++ src/Resources/Files.php | 11 +++++++ src/Resources/FineTunes.php | 13 +++++++++ src/Resources/FineTuning.php | 11 +++++++ src/Resources/Images.php | 7 +++++ src/Resources/Models.php | 7 +++++ src/Resources/Moderations.php | 3 ++ src/Resources/Threads.php | 11 +++++++ src/Resources/ThreadsMessages.php | 9 ++++++ src/Resources/ThreadsMessagesFiles.php | 5 ++++ src/Resources/ThreadsRuns.php | 13 +++++++++ src/Resources/ThreadsRunsSteps.php | 5 ++++ src/Responses/Audio/SpeechStreamResponse.php | 3 ++ src/Responses/StreamResponse.php | 5 ++++ src/Transporters/HttpTransporter.php | 29 ++++++++++++++++--- src/ValueObjects/Transporter/Payload.php | 2 ++ 49 files changed, 355 insertions(+), 11 deletions(-) create mode 100644 src/Exceptions/OpenAIThrowable.php create mode 100644 src/Exceptions/UnreadableResponse.php diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 190afc94..a9cb771a 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -5,5 +5,14 @@ parameters: excludePaths: analyse: - src/Testing + exceptions: + check: + missingCheckedExceptionInThrows: true + tooWideThrowType: true + implicitThrows: false + uncheckedExceptionClasses: + - Http\Discovery\Exception\NotFoundException + - LogicException + - JsonException reportUnmatchedIgnoredErrors: true diff --git a/src/Contracts/Resources/AssistantsContract.php b/src/Contracts/Resources/AssistantsContract.php index 1680319a..9cfc947c 100644 --- a/src/Contracts/Resources/AssistantsContract.php +++ b/src/Contracts/Resources/AssistantsContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Assistants\AssistantDeleteResponse; use OpenAI\Responses\Assistants\AssistantListResponse; use OpenAI\Responses\Assistants\AssistantResponse; @@ -14,6 +15,8 @@ interface AssistantsContract * @see https://platform.openai.com/docs/api-reference/assistants/object * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): AssistantResponse; @@ -21,6 +24,8 @@ public function create(array $parameters): AssistantResponse; * Retrieves an assistant. * * @see https://platform.openai.com/docs/api-reference/assistants/getAssistant + * + * @throws OpenAIThrowable */ public function retrieve(string $id): AssistantResponse; @@ -30,6 +35,8 @@ public function retrieve(string $id): AssistantResponse; * @see https://platform.openai.com/docs/api-reference/assistants/modifyAssistant * * @param array $parameters + * + * @throws OpenAIThrowable */ public function modify(string $id, array $parameters): AssistantResponse; @@ -37,6 +44,8 @@ public function modify(string $id, array $parameters): AssistantResponse; * Delete an assistant. * * @see https://platform.openai.com/docs/api-reference/assistants/deleteAssistant + * + * @throws OpenAIThrowable */ public function delete(string $id): AssistantDeleteResponse; @@ -46,6 +55,8 @@ public function delete(string $id): AssistantDeleteResponse; * @see https://platform.openai.com/docs/api-reference/assistants/listAssistants * * @param array $parameters + * + * @throws OpenAIThrowable */ public function list(array $parameters = []): AssistantListResponse; @@ -53,6 +64,8 @@ public function list(array $parameters = []): AssistantListResponse; * Manage files attached to an assistant. * * @see https://platform.openai.com/docs/api-reference/assistants + * + * @throws OpenAIThrowable */ public function files(): AssistantsFilesContract; } diff --git a/src/Contracts/Resources/AssistantsFilesContract.php b/src/Contracts/Resources/AssistantsFilesContract.php index 0c4370ef..8d86fb4f 100644 --- a/src/Contracts/Resources/AssistantsFilesContract.php +++ b/src/Contracts/Resources/AssistantsFilesContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Assistants\Files\AssistantFileDeleteResponse; use OpenAI\Responses\Assistants\Files\AssistantFileListResponse; use OpenAI\Responses\Assistants\Files\AssistantFileResponse; @@ -14,6 +15,8 @@ interface AssistantsFilesContract * @see https://platform.openai.com/docs/api-reference/assistants/createAssistantFile * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(string $assistantId, array $parameters): AssistantFileResponse; @@ -21,6 +24,8 @@ public function create(string $assistantId, array $parameters): AssistantFileRes * Retrieves an AssistantFile. * * @see https://platform.openai.com/docs/api-reference/assistants/getAssistantFile + * + * @throws OpenAIThrowable */ public function retrieve(string $assistantId, string $fileId): AssistantFileResponse; @@ -28,6 +33,8 @@ public function retrieve(string $assistantId, string $fileId): AssistantFileResp * Delete an assistant file. * * @see https://platform.openai.com/docs/api-reference/assistants/deleteAssistantFile + * + * @throws OpenAIThrowable */ public function delete(string $assistantId, string $fileId): AssistantFileDeleteResponse; @@ -37,6 +44,8 @@ public function delete(string $assistantId, string $fileId): AssistantFileDelete * @see https://platform.openai.com/docs/api-reference/assistants/listAssistantFiles * * @param array $parameters + * + * @throws OpenAIThrowable */ public function list(string $assistantId, array $parameters = []): AssistantFileListResponse; } diff --git a/src/Contracts/Resources/AudioContract.php b/src/Contracts/Resources/AudioContract.php index dda91572..422b2dec 100644 --- a/src/Contracts/Resources/AudioContract.php +++ b/src/Contracts/Resources/AudioContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Audio\SpeechStreamResponse; use OpenAI\Responses\Audio\TranscriptionResponse; use OpenAI\Responses\Audio\TranslationResponse; @@ -14,6 +15,8 @@ interface AudioContract * @see https://platform.openai.com/docs/api-reference/audio/createSpeech * * @param array $parameters + * + * @throws OpenAIThrowable */ public function speech(array $parameters): string; @@ -23,6 +26,8 @@ public function speech(array $parameters): string; * @see https://platform.openai.com/docs/api-reference/audio/createSpeech * * @param array $parameters + * + * @throws OpenAIThrowable */ public function speechStreamed(array $parameters): SpeechStreamResponse; @@ -32,6 +37,8 @@ public function speechStreamed(array $parameters): SpeechStreamResponse; * @see https://platform.openai.com/docs/api-reference/audio/createTranscription * * @param array $parameters + * + * @throws OpenAIThrowable */ public function transcribe(array $parameters): TranscriptionResponse; @@ -41,6 +48,8 @@ public function transcribe(array $parameters): TranscriptionResponse; * @see https://platform.openai.com/docs/api-reference/audio/createTranslation * * @param array $parameters + * + * @throws OpenAIThrowable */ public function translate(array $parameters): TranslationResponse; } diff --git a/src/Contracts/Resources/ChatContract.php b/src/Contracts/Resources/ChatContract.php index 4c943b81..ad52bbb4 100644 --- a/src/Contracts/Resources/ChatContract.php +++ b/src/Contracts/Resources/ChatContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Chat\CreateResponse; use OpenAI\Responses\Chat\CreateStreamedResponse; use OpenAI\Responses\StreamResponse; @@ -14,6 +15,8 @@ interface ChatContract * @see https://platform.openai.com/docs/api-reference/chat/create * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): CreateResponse; @@ -24,6 +27,8 @@ public function create(array $parameters): CreateResponse; * * @param array $parameters * @return StreamResponse + * + * @throws OpenAIThrowable */ public function createStreamed(array $parameters): StreamResponse; } diff --git a/src/Contracts/Resources/CompletionsContract.php b/src/Contracts/Resources/CompletionsContract.php index eb198c45..b50cfac2 100644 --- a/src/Contracts/Resources/CompletionsContract.php +++ b/src/Contracts/Resources/CompletionsContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Completions\CreateResponse; use OpenAI\Responses\Completions\CreateStreamedResponse; use OpenAI\Responses\StreamResponse; @@ -14,6 +15,8 @@ interface CompletionsContract * @see https://platform.openai.com/docs/api-reference/completions/create-completion * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): CreateResponse; @@ -24,6 +27,8 @@ public function create(array $parameters): CreateResponse; * * @param array $parameters * @return StreamResponse + * + * @throws OpenAIThrowable */ public function createStreamed(array $parameters): StreamResponse; } diff --git a/src/Contracts/Resources/EditsContract.php b/src/Contracts/Resources/EditsContract.php index a2a2ac69..451916de 100644 --- a/src/Contracts/Resources/EditsContract.php +++ b/src/Contracts/Resources/EditsContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Edits\CreateResponse; interface EditsContract @@ -13,6 +14,8 @@ interface EditsContract * * @param array $parameters * + * @throws OpenAIThrowable + * * @deprecated OpenAI has deprecated this endpoint and will stop working by January 4, 2024. * https://openai.com/blog/gpt-4-api-general-availability#deprecation-of-the-edits-api */ diff --git a/src/Contracts/Resources/EmbeddingsContract.php b/src/Contracts/Resources/EmbeddingsContract.php index a308535a..d76fe0f7 100644 --- a/src/Contracts/Resources/EmbeddingsContract.php +++ b/src/Contracts/Resources/EmbeddingsContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Embeddings\CreateResponse; interface EmbeddingsContract @@ -12,6 +13,8 @@ interface EmbeddingsContract * @see https://platform.openai.com/docs/api-reference/embeddings/create * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): CreateResponse; } diff --git a/src/Contracts/Resources/FilesContract.php b/src/Contracts/Resources/FilesContract.php index cf748a77..0555f8fc 100644 --- a/src/Contracts/Resources/FilesContract.php +++ b/src/Contracts/Resources/FilesContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Files\CreateResponse; use OpenAI\Responses\Files\DeleteResponse; use OpenAI\Responses\Files\ListResponse; @@ -13,6 +14,8 @@ interface FilesContract * Returns a list of files that belong to the user's organization. * * @see https://platform.openai.com/docs/api-reference/files/list + * + * @throws OpenAIThrowable */ public function list(): ListResponse; @@ -20,6 +23,8 @@ public function list(): ListResponse; * Returns information about a specific file. * * @see https://platform.openai.com/docs/api-reference/files/retrieve + * + * @throws OpenAIThrowable */ public function retrieve(string $file): RetrieveResponse; @@ -27,6 +32,8 @@ public function retrieve(string $file): RetrieveResponse; * Returns the contents of the specified file. * * @see https://platform.openai.com/docs/api-reference/files/retrieve-content + * + * @throws OpenAIThrowable */ public function download(string $file): string; @@ -36,6 +43,8 @@ public function download(string $file): string; * @see https://platform.openai.com/docs/api-reference/files/upload * * @param array $parameters + * + * @throws OpenAIThrowable */ public function upload(array $parameters): CreateResponse; @@ -43,6 +52,8 @@ public function upload(array $parameters): CreateResponse; * Delete a file. * * @see https://platform.openai.com/docs/api-reference/files/delete + * + * @throws OpenAIThrowable */ public function delete(string $file): DeleteResponse; } diff --git a/src/Contracts/Resources/FineTunesContract.php b/src/Contracts/Resources/FineTunesContract.php index af107135..4406c742 100644 --- a/src/Contracts/Resources/FineTunesContract.php +++ b/src/Contracts/Resources/FineTunesContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\FineTunes\ListEventsResponse; use OpenAI\Responses\FineTunes\ListResponse; use OpenAI\Responses\FineTunes\RetrieveResponse; @@ -18,6 +19,8 @@ interface FineTunesContract * @see https://platform.openai.com/docs/api-reference/fine-tunes/create * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): RetrieveResponse; @@ -25,6 +28,8 @@ public function create(array $parameters): RetrieveResponse; * List your organization's fine-tuning jobs. * * @see https://platform.openai.com/docs/api-reference/fine-tunes/list + * + * @throws OpenAIThrowable */ public function list(): ListResponse; @@ -32,6 +37,8 @@ public function list(): ListResponse; * Gets info about the fine-tune job. * * @see https://platform.openai.com/docs/api-reference/fine-tunes/list + * + * @throws OpenAIThrowable */ public function retrieve(string $fineTuneId): RetrieveResponse; @@ -39,6 +46,8 @@ public function retrieve(string $fineTuneId): RetrieveResponse; * Immediately cancel a fine-tune job. * * @see https://platform.openai.com/docs/api-reference/fine-tunes/cancel + * + * @throws OpenAIThrowable */ public function cancel(string $fineTuneId): RetrieveResponse; @@ -46,6 +55,8 @@ public function cancel(string $fineTuneId): RetrieveResponse; * Get fine-grained status updates for a fine-tune job. * * @see https://platform.openai.com/docs/api-reference/fine-tunes/events + * + * @throws OpenAIThrowable */ public function listEvents(string $fineTuneId): ListEventsResponse; @@ -55,6 +66,8 @@ public function listEvents(string $fineTuneId): ListEventsResponse; * @see https://platform.openai.com/docs/api-reference/fine-tunes/events * * @return StreamResponse + * + * @throws OpenAIThrowable */ public function listEventsStreamed(string $fineTuneId): StreamResponse; } diff --git a/src/Contracts/Resources/FineTuningContract.php b/src/Contracts/Resources/FineTuningContract.php index 96e0ead8..ae186e0f 100644 --- a/src/Contracts/Resources/FineTuningContract.php +++ b/src/Contracts/Resources/FineTuningContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\FineTuning\ListJobEventsResponse; use OpenAI\Responses\FineTuning\ListJobsResponse; use OpenAI\Responses\FineTuning\RetrieveJobResponse; @@ -16,6 +17,8 @@ interface FineTuningContract * @see https://platform.openai.com/docs/api-reference/fine-tuning/create * * @param array $parameters + * + * @throws OpenAIThrowable */ public function createJob(array $parameters): RetrieveJobResponse; @@ -25,6 +28,8 @@ public function createJob(array $parameters): RetrieveJobResponse; * @see https://platform.openai.com/docs/api-reference/fine-tuning/undefined * * @param array $parameters + * + * @throws OpenAIThrowable */ public function listJobs(array $parameters = []): ListJobsResponse; @@ -32,6 +37,8 @@ public function listJobs(array $parameters = []): ListJobsResponse; * Get info about a fine-tuning job. * * @see https://platform.openai.com/docs/api-reference/fine-tuning/retrieve + * + * @throws OpenAIThrowable */ public function retrieveJob(string $jobId): RetrieveJobResponse; @@ -39,6 +46,8 @@ public function retrieveJob(string $jobId): RetrieveJobResponse; * Immediately cancel a fine-tune job. * * @see https://platform.openai.com/docs/api-reference/fine-tuning/cancel + * + * @throws OpenAIThrowable */ public function cancelJob(string $jobId): RetrieveJobResponse; @@ -48,6 +57,8 @@ public function cancelJob(string $jobId): RetrieveJobResponse; * @see https://platform.openai.com/docs/api-reference/fine-tuning/list-events * * @param array $parameters + * + * @throws OpenAIThrowable */ public function listJobEvents(string $jobId, array $parameters = []): ListJobEventsResponse; } diff --git a/src/Contracts/Resources/ImagesContract.php b/src/Contracts/Resources/ImagesContract.php index 32cb2fdc..b92ca1d4 100644 --- a/src/Contracts/Resources/ImagesContract.php +++ b/src/Contracts/Resources/ImagesContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Images\CreateResponse; use OpenAI\Responses\Images\EditResponse; use OpenAI\Responses\Images\VariationResponse; @@ -14,6 +15,8 @@ interface ImagesContract * @see https://platform.openai.com/docs/api-reference/images/create * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): CreateResponse; @@ -23,6 +26,8 @@ public function create(array $parameters): CreateResponse; * @see https://platform.openai.com/docs/api-reference/images/create-edit * * @param array $parameters + * + * @throws OpenAIThrowable */ public function edit(array $parameters): EditResponse; @@ -32,6 +37,8 @@ public function edit(array $parameters): EditResponse; * @see https://platform.openai.com/docs/api-reference/images/create-variation * * @param array $parameters + * + * @throws OpenAIThrowable */ public function variation(array $parameters): VariationResponse; } diff --git a/src/Contracts/Resources/ModelsContract.php b/src/Contracts/Resources/ModelsContract.php index 975509f0..7d1191f7 100644 --- a/src/Contracts/Resources/ModelsContract.php +++ b/src/Contracts/Resources/ModelsContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Models\DeleteResponse; use OpenAI\Responses\Models\ListResponse; use OpenAI\Responses\Models\RetrieveResponse; @@ -12,6 +13,8 @@ interface ModelsContract * Lists the currently available models, and provides basic information about each one such as the owner and availability. * * @see https://platform.openai.com/docs/api-reference/models/list + * + * @throws OpenAIThrowable */ public function list(): ListResponse; @@ -19,6 +22,8 @@ public function list(): ListResponse; * Retrieves a model instance, providing basic information about the model such as the owner and permissioning. * * @see https://platform.openai.com/docs/api-reference/models/retrieve + * + * @throws OpenAIThrowable */ public function retrieve(string $model): RetrieveResponse; @@ -26,6 +31,8 @@ public function retrieve(string $model): RetrieveResponse; * Delete a fine-tuned model. You must have the Owner role in your organization. * * @see https://platform.openai.com/docs/api-reference/fine-tunes/delete-model + * + * @throws OpenAIThrowable */ public function delete(string $model): DeleteResponse; } diff --git a/src/Contracts/Resources/ModerationsContract.php b/src/Contracts/Resources/ModerationsContract.php index 80fd371f..8a1b42bc 100644 --- a/src/Contracts/Resources/ModerationsContract.php +++ b/src/Contracts/Resources/ModerationsContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Moderations\CreateResponse; interface ModerationsContract @@ -12,6 +13,8 @@ interface ModerationsContract * @see https://platform.openai.com/docs/api-reference/moderations/create * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): CreateResponse; } diff --git a/src/Contracts/Resources/ThreadsContract.php b/src/Contracts/Resources/ThreadsContract.php index 6ee57a3f..86111259 100644 --- a/src/Contracts/Resources/ThreadsContract.php +++ b/src/Contracts/Resources/ThreadsContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Threads\Runs\ThreadRunResponse; use OpenAI\Responses\Threads\ThreadDeleteResponse; use OpenAI\Responses\Threads\ThreadResponse; @@ -14,6 +15,8 @@ interface ThreadsContract * @see https://platform.openai.com/docs/api-reference/threads/createThread * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): ThreadResponse; @@ -23,6 +26,8 @@ public function create(array $parameters): ThreadResponse; * @see https://platform.openai.com/docs/api-reference/runs/createThreadAndRun * * @param array $parameters + * + * @throws OpenAIThrowable */ public function createAndRun(array $parameters): ThreadRunResponse; @@ -30,6 +35,8 @@ public function createAndRun(array $parameters): ThreadRunResponse; * Retrieves a thread. * * @see https://platform.openai.com/docs/api-reference/threads/getThread + * + * @throws OpenAIThrowable */ public function retrieve(string $id): ThreadResponse; @@ -39,6 +46,8 @@ public function retrieve(string $id): ThreadResponse; * @see https://platform.openai.com/docs/api-reference/threads/modifyThread * * @param array $parameters + * + * @throws OpenAIThrowable */ public function modify(string $id, array $parameters): ThreadResponse; @@ -46,6 +55,8 @@ public function modify(string $id, array $parameters): ThreadResponse; * Delete an thread. * * @see https://platform.openai.com/docs/api-reference/threads/deleteThread + * + * @throws OpenAIThrowable */ public function delete(string $id): ThreadDeleteResponse; diff --git a/src/Contracts/Resources/ThreadsMessagesContract.php b/src/Contracts/Resources/ThreadsMessagesContract.php index 741844b3..2fef3255 100644 --- a/src/Contracts/Resources/ThreadsMessagesContract.php +++ b/src/Contracts/Resources/ThreadsMessagesContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Threads\Messages\ThreadMessageListResponse; use OpenAI\Responses\Threads\Messages\ThreadMessageResponse; @@ -13,6 +14,8 @@ interface ThreadsMessagesContract * @see https://platform.openai.com/docs/api-reference/messages/createMessage * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(string $threadId, array $parameters): ThreadMessageResponse; @@ -20,6 +23,8 @@ public function create(string $threadId, array $parameters): ThreadMessageRespon * Retrieve a message. * * @see https://platform.openai.com/docs/api-reference/messages/getMessage + * + * @throws OpenAIThrowable */ public function retrieve(string $threadId, string $messageId): ThreadMessageResponse; @@ -29,6 +34,8 @@ public function retrieve(string $threadId, string $messageId): ThreadMessageResp * @see https://platform.openai.com/docs/api-reference/messages/modifyMessage * * @param array $parameters + * + * @throws OpenAIThrowable */ public function modify(string $threadId, string $messageId, array $parameters): ThreadMessageResponse; @@ -38,6 +45,8 @@ public function modify(string $threadId, string $messageId, array $parameters): * @see https://platform.openai.com/docs/api-reference/messages/listMessages * * @param array $parameters + * + * @throws OpenAIThrowable */ public function list(string $threadId, array $parameters = []): ThreadMessageListResponse; diff --git a/src/Contracts/Resources/ThreadsMessagesFilesContract.php b/src/Contracts/Resources/ThreadsMessagesFilesContract.php index 1f9e4aa5..c6d4dbad 100644 --- a/src/Contracts/Resources/ThreadsMessagesFilesContract.php +++ b/src/Contracts/Resources/ThreadsMessagesFilesContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Threads\Messages\Files\ThreadMessageFileListResponse; use OpenAI\Responses\Threads\Messages\Files\ThreadMessageFileResponse; @@ -11,6 +12,8 @@ interface ThreadsMessagesFilesContract * Retrieves a message file. * * @see https://platform.openai.com/docs/api-reference/messages/getMessageFile + * + * @throws OpenAIThrowable */ public function retrieve(string $threadId, string $messageId, string $fileId): ThreadMessageFileResponse; @@ -20,6 +23,8 @@ public function retrieve(string $threadId, string $messageId, string $fileId): T * @see https://platform.openai.com/docs/api-reference/messages/listMessageFiles * * @param array $parameters + * + * @throws OpenAIThrowable */ public function list(string $threadId, string $messageId, array $parameters = []): ThreadMessageFileListResponse; } diff --git a/src/Contracts/Resources/ThreadsRunsContract.php b/src/Contracts/Resources/ThreadsRunsContract.php index d56dfed8..4a784858 100644 --- a/src/Contracts/Resources/ThreadsRunsContract.php +++ b/src/Contracts/Resources/ThreadsRunsContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Threads\Runs\ThreadRunListResponse; use OpenAI\Responses\Threads\Runs\ThreadRunResponse; @@ -13,6 +14,8 @@ interface ThreadsRunsContract * @see https://platform.openai.com/docs/api-reference/runs/createRun * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(string $threadId, array $parameters): ThreadRunResponse; diff --git a/src/Contracts/Resources/ThreadsRunsStepsContract.php b/src/Contracts/Resources/ThreadsRunsStepsContract.php index f5f0d204..c0c3a7fa 100644 --- a/src/Contracts/Resources/ThreadsRunsStepsContract.php +++ b/src/Contracts/Resources/ThreadsRunsStepsContract.php @@ -2,6 +2,7 @@ namespace OpenAI\Contracts\Resources; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Threads\Runs\Steps\ThreadRunStepListResponse; use OpenAI\Responses\Threads\Runs\Steps\ThreadRunStepResponse; @@ -11,6 +12,8 @@ interface ThreadsRunsStepsContract * Retrieves a run step. * * @see https://platform.openai.com/docs/api-reference/runs/getRunStep + * + * @throws OpenAIThrowable */ public function retrieve(string $threadId, string $runId, string $stepId): ThreadRunStepResponse; @@ -20,6 +23,8 @@ public function retrieve(string $threadId, string $runId, string $stepId): Threa * @see https://platform.openai.com/docs/api-reference/runs/listRunSteps * * @param array $parameters + * + * @throws OpenAIThrowable */ public function list(string $threadId, string $runId, array $parameters = []): ThreadRunStepListResponse; } diff --git a/src/Contracts/TransporterContract.php b/src/Contracts/TransporterContract.php index 4b077ceb..c0bfa97f 100644 --- a/src/Contracts/TransporterContract.php +++ b/src/Contracts/TransporterContract.php @@ -5,7 +5,9 @@ namespace OpenAI\Contracts; use OpenAI\Exceptions\ErrorException; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Exceptions\TransporterException; +use OpenAI\Exceptions\UnreadableResponse; use OpenAI\Exceptions\UnserializableResponse; use OpenAI\ValueObjects\Transporter\Payload; use OpenAI\ValueObjects\Transporter\Response; @@ -21,21 +23,21 @@ interface TransporterContract * * @return Response|string> * - * @throws ErrorException|UnserializableResponse|TransporterException + * @throws OpenAIThrowable */ public function requestObject(Payload $payload): Response; /** * Sends a content request to a server. * - * @throws ErrorException|TransporterException + * @throws OpenAIThrowable */ public function requestContent(Payload $payload): string; /** * Sends a stream request to a server. ** - * @throws ErrorException + * @throws OpenAIThrowable */ public function requestStream(Payload $payload): ResponseInterface; } diff --git a/src/Exceptions/ErrorException.php b/src/Exceptions/ErrorException.php index f0dba316..dc7eaa90 100644 --- a/src/Exceptions/ErrorException.php +++ b/src/Exceptions/ErrorException.php @@ -6,7 +6,7 @@ use Exception; -final class ErrorException extends Exception +final class ErrorException extends Exception implements OpenAIThrowable { /** * Creates a new Exception instance. diff --git a/src/Exceptions/InvalidArgumentException.php b/src/Exceptions/InvalidArgumentException.php index d946e2b3..baac01b9 100644 --- a/src/Exceptions/InvalidArgumentException.php +++ b/src/Exceptions/InvalidArgumentException.php @@ -6,6 +6,6 @@ use Exception; -final class InvalidArgumentException extends Exception +final class InvalidArgumentException extends Exception implements OpenAIThrowable { } diff --git a/src/Exceptions/OpenAIThrowable.php b/src/Exceptions/OpenAIThrowable.php new file mode 100644 index 00000000..209f4c38 --- /dev/null +++ b/src/Exceptions/OpenAIThrowable.php @@ -0,0 +1,9 @@ +getMessage(), 0, $exception); + } +} diff --git a/src/Exceptions/UnserializableResponse.php b/src/Exceptions/UnserializableResponse.php index 2f9d0643..2ee56f68 100644 --- a/src/Exceptions/UnserializableResponse.php +++ b/src/Exceptions/UnserializableResponse.php @@ -7,7 +7,7 @@ use Exception; use JsonException; -final class UnserializableResponse extends Exception +final class UnserializableResponse extends Exception implements OpenAIThrowable { /** * Creates a new Exception instance. diff --git a/src/Resources/Assistants.php b/src/Resources/Assistants.php index 2e785b06..fda82eb4 100644 --- a/src/Resources/Assistants.php +++ b/src/Resources/Assistants.php @@ -6,6 +6,7 @@ use OpenAI\Contracts\Resources\AssistantsContract; use OpenAI\Contracts\Resources\AssistantsFilesContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Assistants\AssistantDeleteResponse; use OpenAI\Responses\Assistants\AssistantListResponse; use OpenAI\Responses\Assistants\AssistantResponse; @@ -22,6 +23,8 @@ final class Assistants implements AssistantsContract * @see https://platform.openai.com/docs/api-reference/assistants/object * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): AssistantResponse { @@ -37,6 +40,8 @@ public function create(array $parameters): AssistantResponse * Retrieves an assistant. * * @see https://platform.openai.com/docs/api-reference/assistants/getAssistant + * + * @throws OpenAIThrowable */ public function retrieve(string $id): AssistantResponse { @@ -54,6 +59,8 @@ public function retrieve(string $id): AssistantResponse * @see https://platform.openai.com/docs/api-reference/assistants/modifyAssistant * * @param array $parameters + * + * @throws OpenAIThrowable */ public function modify(string $id, array $parameters): AssistantResponse { @@ -69,6 +76,8 @@ public function modify(string $id, array $parameters): AssistantResponse * Delete an assistant. * * @see https://platform.openai.com/docs/api-reference/assistants/deleteAssistant + * + * @throws OpenAIThrowable */ public function delete(string $id): AssistantDeleteResponse { @@ -86,6 +95,8 @@ public function delete(string $id): AssistantDeleteResponse * @see https://platform.openai.com/docs/api-reference/assistants/listAssistants * * @param array $parameters + * + * @throws OpenAIThrowable */ public function list(array $parameters = []): AssistantListResponse { diff --git a/src/Resources/AssistantsFiles.php b/src/Resources/AssistantsFiles.php index aab3a447..a51d9a27 100644 --- a/src/Resources/AssistantsFiles.php +++ b/src/Resources/AssistantsFiles.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\AssistantsFilesContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Assistants\Files\AssistantFileDeleteResponse; use OpenAI\Responses\Assistants\Files\AssistantFileListResponse; use OpenAI\Responses\Assistants\Files\AssistantFileResponse; @@ -21,6 +22,8 @@ final class AssistantsFiles implements AssistantsFilesContract * @see https://platform.openai.com/docs/api-reference/assistants/createAssistantFile * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(string $assistantId, array $parameters): AssistantFileResponse { @@ -36,6 +39,8 @@ public function create(string $assistantId, array $parameters): AssistantFileRes * Retrieves an AssistantFile. * * @see https://platform.openai.com/docs/api-reference/assistants/getAssistantFile + * + * @throws OpenAIThrowable */ public function retrieve(string $assistantId, string $fileId): AssistantFileResponse { @@ -51,6 +56,8 @@ public function retrieve(string $assistantId, string $fileId): AssistantFileResp * Delete an assistant file. * * @see https://platform.openai.com/docs/api-reference/assistants/deleteAssistantFile + * + * @throws OpenAIThrowable */ public function delete(string $assistantId, string $fileId): AssistantFileDeleteResponse { @@ -68,6 +75,8 @@ public function delete(string $assistantId, string $fileId): AssistantFileDelete * @see https://platform.openai.com/docs/api-reference/assistants/listAssistantFiles * * @param array $parameters + * + * @throws OpenAIThrowable */ public function list(string $assistantId, array $parameters = []): AssistantFileListResponse { diff --git a/src/Resources/Audio.php b/src/Resources/Audio.php index 6dfef09d..b08405fc 100644 --- a/src/Resources/Audio.php +++ b/src/Resources/Audio.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\AudioContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Audio\SpeechStreamResponse; use OpenAI\Responses\Audio\TranscriptionResponse; use OpenAI\Responses\Audio\TranslationResponse; @@ -21,6 +22,8 @@ final class Audio implements AudioContract * @see https://platform.openai.com/docs/api-reference/audio/createSpeech * * @param array $parameters + * + * @throws OpenAIThrowable */ public function speech(array $parameters): string { @@ -35,6 +38,8 @@ public function speech(array $parameters): string * @see https://platform.openai.com/docs/api-reference/audio/createSpeech * * @param array $parameters + * + * @throws OpenAIThrowable */ public function speechStreamed(array $parameters): SpeechStreamResponse { @@ -51,6 +56,8 @@ public function speechStreamed(array $parameters): SpeechStreamResponse * @see https://platform.openai.com/docs/api-reference/audio/createTranscription * * @param array $parameters + * + * @throws OpenAIThrowable */ public function transcribe(array $parameters): TranscriptionResponse { @@ -68,6 +75,8 @@ public function transcribe(array $parameters): TranscriptionResponse * @see https://platform.openai.com/docs/api-reference/audio/createTranslation * * @param array $parameters + * + * @throws OpenAIThrowable */ public function translate(array $parameters): TranslationResponse { diff --git a/src/Resources/Chat.php b/src/Resources/Chat.php index 4d4999f3..0bd00586 100644 --- a/src/Resources/Chat.php +++ b/src/Resources/Chat.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\ChatContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Chat\CreateResponse; use OpenAI\Responses\Chat\CreateStreamedResponse; use OpenAI\Responses\StreamResponse; @@ -22,6 +23,8 @@ final class Chat implements ChatContract * @see https://platform.openai.com/docs/api-reference/chat/create * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): CreateResponse { @@ -42,6 +45,8 @@ public function create(array $parameters): CreateResponse * * @param array $parameters * @return StreamResponse + * + * @throws OpenAIThrowable */ public function createStreamed(array $parameters): StreamResponse { diff --git a/src/Resources/Completions.php b/src/Resources/Completions.php index 60edcae9..ebb9d029 100644 --- a/src/Resources/Completions.php +++ b/src/Resources/Completions.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\CompletionsContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Completions\CreateResponse; use OpenAI\Responses\Completions\CreateStreamedResponse; use OpenAI\Responses\StreamResponse; @@ -22,6 +23,8 @@ final class Completions implements CompletionsContract * @see https://platform.openai.com/docs/api-reference/completions/create-completion * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): CreateResponse { @@ -42,6 +45,8 @@ public function create(array $parameters): CreateResponse * * @param array $parameters * @return StreamResponse + * + * @throws OpenAIThrowable */ public function createStreamed(array $parameters): StreamResponse { diff --git a/src/Resources/Concerns/Streamable.php b/src/Resources/Concerns/Streamable.php index a6362984..ce493ee6 100644 --- a/src/Resources/Concerns/Streamable.php +++ b/src/Resources/Concerns/Streamable.php @@ -8,6 +8,8 @@ trait Streamable { /** * @param array $parameters + * + * @throws InvalidArgumentException */ private function ensureNotStreamed(array $parameters): void { diff --git a/src/Resources/Edits.php b/src/Resources/Edits.php index 859f68ac..537f2853 100644 --- a/src/Resources/Edits.php +++ b/src/Resources/Edits.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\EditsContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Edits\CreateResponse; use OpenAI\ValueObjects\Transporter\Payload; use OpenAI\ValueObjects\Transporter\Response; @@ -20,6 +21,8 @@ final class Edits implements EditsContract * * @param array $parameters * + * @throws OpenAIThrowable + * * @deprecated OpenAI has deprecated this endpoint and will stop working by January 4, 2024. * https://openai.com/blog/gpt-4-api-general-availability#deprecation-of-the-edits-api */ diff --git a/src/Resources/Embeddings.php b/src/Resources/Embeddings.php index fd0b9467..9a633e6e 100644 --- a/src/Resources/Embeddings.php +++ b/src/Resources/Embeddings.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\EmbeddingsContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Embeddings\CreateResponse; use OpenAI\ValueObjects\Transporter\Payload; use OpenAI\ValueObjects\Transporter\Response; @@ -19,6 +20,8 @@ final class Embeddings implements EmbeddingsContract * @see https://platform.openai.com/docs/api-reference/embeddings/create * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): CreateResponse { diff --git a/src/Resources/Files.php b/src/Resources/Files.php index b5c53cce..a40c19ad 100644 --- a/src/Resources/Files.php +++ b/src/Resources/Files.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\FilesContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Files\CreateResponse; use OpenAI\Responses\Files\DeleteResponse; use OpenAI\Responses\Files\ListResponse; @@ -20,6 +21,8 @@ final class Files implements FilesContract * Returns a list of files that belong to the user's organization. * * @see https://platform.openai.com/docs/api-reference/files/list + * + * @throws OpenAIThrowable */ public function list(): ListResponse { @@ -35,6 +38,8 @@ public function list(): ListResponse * Returns information about a specific file. * * @see https://platform.openai.com/docs/api-reference/files/retrieve + * + * @throws OpenAIThrowable */ public function retrieve(string $file): RetrieveResponse { @@ -50,6 +55,8 @@ public function retrieve(string $file): RetrieveResponse * Returns the contents of the specified file. * * @see https://platform.openai.com/docs/api-reference/files/retrieve-content + * + * @throws OpenAIThrowable */ public function download(string $file): string { @@ -64,6 +71,8 @@ public function download(string $file): string * @see https://platform.openai.com/docs/api-reference/files/upload * * @param array $parameters + * + * @throws OpenAIThrowable */ public function upload(array $parameters): CreateResponse { @@ -79,6 +88,8 @@ public function upload(array $parameters): CreateResponse * Delete a file. * * @see https://platform.openai.com/docs/api-reference/files/delete + * + * @throws OpenAIThrowable */ public function delete(string $file): DeleteResponse { diff --git a/src/Resources/FineTunes.php b/src/Resources/FineTunes.php index 3d9331df..6d6f7938 100644 --- a/src/Resources/FineTunes.php +++ b/src/Resources/FineTunes.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\FineTunesContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\FineTunes\ListEventsResponse; use OpenAI\Responses\FineTunes\ListResponse; use OpenAI\Responses\FineTunes\RetrieveResponse; @@ -25,6 +26,8 @@ final class FineTunes implements FineTunesContract * @see https://platform.openai.com/docs/api-reference/fine-tunes/create * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): RetrieveResponse { @@ -40,6 +43,8 @@ public function create(array $parameters): RetrieveResponse * List your organization's fine-tuning jobs. * * @see https://platform.openai.com/docs/api-reference/fine-tunes/list + * + * @throws OpenAIThrowable */ public function list(): ListResponse { @@ -55,6 +60,8 @@ public function list(): ListResponse * Gets info about the fine-tune job. * * @see https://platform.openai.com/docs/api-reference/fine-tunes/list + * + * @throws OpenAIThrowable */ public function retrieve(string $fineTuneId): RetrieveResponse { @@ -70,6 +77,8 @@ public function retrieve(string $fineTuneId): RetrieveResponse * Immediately cancel a fine-tune job. * * @see https://platform.openai.com/docs/api-reference/fine-tunes/cancel + * + * @throws OpenAIThrowable */ public function cancel(string $fineTuneId): RetrieveResponse { @@ -85,6 +94,8 @@ public function cancel(string $fineTuneId): RetrieveResponse * Get fine-grained status updates for a fine-tune job. * * @see https://platform.openai.com/docs/api-reference/fine-tunes/events + * + * @throws OpenAIThrowable */ public function listEvents(string $fineTuneId): ListEventsResponse { @@ -102,6 +113,8 @@ public function listEvents(string $fineTuneId): ListEventsResponse * @see https://platform.openai.com/docs/api-reference/fine-tunes/events * * @return StreamResponse + * + * @throws OpenAIThrowable */ public function listEventsStreamed(string $fineTuneId): StreamResponse { diff --git a/src/Resources/FineTuning.php b/src/Resources/FineTuning.php index ba9fc751..3f2e9cac 100644 --- a/src/Resources/FineTuning.php +++ b/src/Resources/FineTuning.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\FineTuningContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\FineTuning\ListJobEventsResponse; use OpenAI\Responses\FineTuning\ListJobsResponse; use OpenAI\Responses\FineTuning\RetrieveJobResponse; @@ -23,6 +24,8 @@ final class FineTuning implements FineTuningContract * @see https://platform.openai.com/docs/api-reference/fine-tuning/create * * @param array $parameters + * + * @throws OpenAIThrowable */ public function createJob(array $parameters): RetrieveJobResponse { @@ -40,6 +43,8 @@ public function createJob(array $parameters): RetrieveJobResponse * @see https://platform.openai.com/docs/api-reference/fine-tuning/undefined * * @param array $parameters + * + * @throws OpenAIThrowable */ public function listJobs(array $parameters = []): ListJobsResponse { @@ -55,6 +60,8 @@ public function listJobs(array $parameters = []): ListJobsResponse * Gets info about the fine-tune job. * * @see https://platform.openai.com/docs/api-reference/fine-tuning/retrieve + * + * @throws OpenAIThrowable */ public function retrieveJob(string $jobId): RetrieveJobResponse { @@ -70,6 +77,8 @@ public function retrieveJob(string $jobId): RetrieveJobResponse * Immediately cancel a fine-tune job. * * @see https://platform.openai.com/docs/api-reference/fine-tuning/cancel + * + * @throws OpenAIThrowable */ public function cancelJob(string $jobId): RetrieveJobResponse { @@ -87,6 +96,8 @@ public function cancelJob(string $jobId): RetrieveJobResponse * @see https://platform.openai.com/docs/api-reference/fine-tuning/list-events * * @param array $parameters + * + * @throws OpenAIThrowable */ public function listJobEvents(string $jobId, array $parameters = []): ListJobEventsResponse { diff --git a/src/Resources/Images.php b/src/Resources/Images.php index 465678c4..483877f0 100644 --- a/src/Resources/Images.php +++ b/src/Resources/Images.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\ImagesContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Images\CreateResponse; use OpenAI\Responses\Images\EditResponse; use OpenAI\Responses\Images\VariationResponse; @@ -21,6 +22,8 @@ final class Images implements ImagesContract * @see https://platform.openai.com/docs/api-reference/images/create * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): CreateResponse { @@ -38,6 +41,8 @@ public function create(array $parameters): CreateResponse * @see https://platform.openai.com/docs/api-reference/images/create-edit * * @param array $parameters + * + * @throws OpenAIThrowable */ public function edit(array $parameters): EditResponse { @@ -55,6 +60,8 @@ public function edit(array $parameters): EditResponse * @see https://platform.openai.com/docs/api-reference/images/create-variation * * @param array $parameters + * + * @throws OpenAIThrowable */ public function variation(array $parameters): VariationResponse { diff --git a/src/Resources/Models.php b/src/Resources/Models.php index f88817f4..3215fd4f 100644 --- a/src/Resources/Models.php +++ b/src/Resources/Models.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\ModelsContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Models\DeleteResponse; use OpenAI\Responses\Models\ListResponse; use OpenAI\Responses\Models\RetrieveResponse; @@ -19,6 +20,8 @@ final class Models implements ModelsContract * Lists the currently available models, and provides basic information about each one such as the owner and availability. * * @see https://platform.openai.com/docs/api-reference/models/list + * + * @throws OpenAIThrowable */ public function list(): ListResponse { @@ -34,6 +37,8 @@ public function list(): ListResponse * Retrieves a model instance, providing basic information about the model such as the owner and permissioning. * * @see https://platform.openai.com/docs/api-reference/models/retrieve + * + * @throws OpenAIThrowable */ public function retrieve(string $model): RetrieveResponse { @@ -49,6 +54,8 @@ public function retrieve(string $model): RetrieveResponse * Delete a fine-tuned model. You must have the Owner role in your organization. * * @see https://platform.openai.com/docs/api-reference/fine-tunes/delete-model + * + * @throws OpenAIThrowable */ public function delete(string $model): DeleteResponse { diff --git a/src/Resources/Moderations.php b/src/Resources/Moderations.php index a979e23c..87e7e5e1 100644 --- a/src/Resources/Moderations.php +++ b/src/Resources/Moderations.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\ModerationsContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Moderations\CreateResponse; use OpenAI\ValueObjects\Transporter\Payload; use OpenAI\ValueObjects\Transporter\Response; @@ -19,6 +20,8 @@ final class Moderations implements ModerationsContract * @see https://platform.openai.com/docs/api-reference/moderations/create * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): CreateResponse { diff --git a/src/Resources/Threads.php b/src/Resources/Threads.php index 8966bc70..d0dc8e96 100644 --- a/src/Resources/Threads.php +++ b/src/Resources/Threads.php @@ -7,6 +7,7 @@ use OpenAI\Contracts\Resources\ThreadsContract; use OpenAI\Contracts\Resources\ThreadsMessagesContract; use OpenAI\Contracts\Resources\ThreadsRunsContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Threads\Runs\ThreadRunResponse; use OpenAI\Responses\Threads\ThreadDeleteResponse; use OpenAI\Responses\Threads\ThreadResponse; @@ -23,6 +24,8 @@ final class Threads implements ThreadsContract * @see https://platform.openai.com/docs/api-reference/threads/createThread * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(array $parameters): ThreadResponse { @@ -40,6 +43,8 @@ public function create(array $parameters): ThreadResponse * @see https://platform.openai.com/docs/api-reference/runs/createThreadAndRun * * @param array $parameters + * + * @throws OpenAIThrowable */ public function createAndRun(array $parameters): ThreadRunResponse { @@ -55,6 +60,8 @@ public function createAndRun(array $parameters): ThreadRunResponse * Retrieves a thread. * * @see https://platform.openai.com/docs/api-reference/threads/getThread + * + * @throws OpenAIThrowable */ public function retrieve(string $id): ThreadResponse { @@ -72,6 +79,8 @@ public function retrieve(string $id): ThreadResponse * @see https://platform.openai.com/docs/api-reference/threads/modifyThread * * @param array $parameters + * + * @throws OpenAIThrowable */ public function modify(string $id, array $parameters): ThreadResponse { @@ -87,6 +96,8 @@ public function modify(string $id, array $parameters): ThreadResponse * Delete an thread. * * @see https://platform.openai.com/docs/api-reference/threads/deleteThread + * + * @throws OpenAIThrowable */ public function delete(string $id): ThreadDeleteResponse { diff --git a/src/Resources/ThreadsMessages.php b/src/Resources/ThreadsMessages.php index 9388a311..4002cd05 100644 --- a/src/Resources/ThreadsMessages.php +++ b/src/Resources/ThreadsMessages.php @@ -6,6 +6,7 @@ use OpenAI\Contracts\Resources\ThreadsMessagesContract; use OpenAI\Contracts\Resources\ThreadsMessagesFilesContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Threads\Messages\ThreadMessageListResponse; use OpenAI\Responses\Threads\Messages\ThreadMessageResponse; use OpenAI\ValueObjects\Transporter\Payload; @@ -21,6 +22,8 @@ final class ThreadsMessages implements ThreadsMessagesContract * @see https://platform.openai.com/docs/api-reference/messages/createMessage * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(string $threadId, array $parameters): ThreadMessageResponse { @@ -36,6 +39,8 @@ public function create(string $threadId, array $parameters): ThreadMessageRespon * Retrieve a message. * * @see https://platform.openai.com/docs/api-reference/messages/getMessage + * + * @throws OpenAIThrowable */ public function retrieve(string $threadId, string $messageId): ThreadMessageResponse { @@ -53,6 +58,8 @@ public function retrieve(string $threadId, string $messageId): ThreadMessageResp * @see https://platform.openai.com/docs/api-reference/messages/modifyMessage * * @param array $parameters + * + * @throws OpenAIThrowable */ public function modify(string $threadId, string $messageId, array $parameters): ThreadMessageResponse { @@ -70,6 +77,8 @@ public function modify(string $threadId, string $messageId, array $parameters): * @see https://platform.openai.com/docs/api-reference/messages/listMessages * * @param array $parameters + * + * @throws OpenAIThrowable */ public function list(string $threadId, array $parameters = []): ThreadMessageListResponse { diff --git a/src/Resources/ThreadsMessagesFiles.php b/src/Resources/ThreadsMessagesFiles.php index d3086dde..afaef7a1 100644 --- a/src/Resources/ThreadsMessagesFiles.php +++ b/src/Resources/ThreadsMessagesFiles.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\ThreadsMessagesFilesContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Threads\Messages\Files\ThreadMessageFileListResponse; use OpenAI\Responses\Threads\Messages\Files\ThreadMessageFileResponse; use OpenAI\ValueObjects\Transporter\Payload; @@ -18,6 +19,8 @@ final class ThreadsMessagesFiles implements ThreadsMessagesFilesContract * Retrieves a message file. * * @see https://platform.openai.com/docs/api-reference/messages/getMessageFile + * + * @throws OpenAIThrowable */ public function retrieve(string $threadId, string $messageId, string $fileId): ThreadMessageFileResponse { @@ -35,6 +38,8 @@ public function retrieve(string $threadId, string $messageId, string $fileId): T * @see https://platform.openai.com/docs/api-reference/messages/listMessageFiles * * @param array $parameters + * + * @throws OpenAIThrowable */ public function list(string $threadId, string $messageId, array $parameters = []): ThreadMessageFileListResponse { diff --git a/src/Resources/ThreadsRuns.php b/src/Resources/ThreadsRuns.php index 64e8dc00..bbbd955b 100644 --- a/src/Resources/ThreadsRuns.php +++ b/src/Resources/ThreadsRuns.php @@ -6,6 +6,7 @@ use OpenAI\Contracts\Resources\ThreadsRunsContract; use OpenAI\Contracts\Resources\ThreadsRunsStepsContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Threads\Runs\ThreadRunListResponse; use OpenAI\Responses\Threads\Runs\ThreadRunResponse; use OpenAI\ValueObjects\Transporter\Payload; @@ -21,6 +22,8 @@ final class ThreadsRuns implements ThreadsRunsContract * @see https://platform.openai.com/docs/api-reference/runs/createRun * * @param array $parameters + * + * @throws OpenAIThrowable */ public function create(string $threadId, array $parameters): ThreadRunResponse { @@ -36,6 +39,8 @@ public function create(string $threadId, array $parameters): ThreadRunResponse * Retrieves a run. * * @see https://platform.openai.com/docs/api-reference/runs/getRun + * + * @throws OpenAIThrowable */ public function retrieve(string $threadId, string $runId): ThreadRunResponse { @@ -53,6 +58,8 @@ public function retrieve(string $threadId, string $runId): ThreadRunResponse * @see https://platform.openai.com/docs/api-reference/runs/modifyRun * * @param array $parameters + * + * @throws OpenAIThrowable */ public function modify(string $threadId, string $runId, array $parameters): ThreadRunResponse { @@ -70,6 +77,8 @@ public function modify(string $threadId, string $runId, array $parameters): Thre * @see https://platform.openai.com/docs/api-reference/runs/submitToolOutputs * * @param array $parameters + * + * @throws OpenAIThrowable */ public function submitToolOutputs(string $threadId, string $runId, array $parameters): ThreadRunResponse { @@ -85,6 +94,8 @@ public function submitToolOutputs(string $threadId, string $runId, array $parame * Cancels a run that is `in_progress`. * * @see https://platform.openai.com/docs/api-reference/runs/cancelRun + * + * @throws OpenAIThrowable */ public function cancel(string $threadId, string $runId): ThreadRunResponse { @@ -102,6 +113,8 @@ public function cancel(string $threadId, string $runId): ThreadRunResponse * @see https://platform.openai.com/docs/api-reference/runs/listRuns * * @param array $parameters + * + * @throws OpenAIThrowable */ public function list(string $threadId, array $parameters = []): ThreadRunListResponse { diff --git a/src/Resources/ThreadsRunsSteps.php b/src/Resources/ThreadsRunsSteps.php index a914956f..2031e318 100644 --- a/src/Resources/ThreadsRunsSteps.php +++ b/src/Resources/ThreadsRunsSteps.php @@ -5,6 +5,7 @@ namespace OpenAI\Resources; use OpenAI\Contracts\Resources\ThreadsRunsStepsContract; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Responses\Threads\Runs\Steps\ThreadRunStepListResponse; use OpenAI\Responses\Threads\Runs\Steps\ThreadRunStepResponse; use OpenAI\ValueObjects\Transporter\Payload; @@ -18,6 +19,8 @@ final class ThreadsRunsSteps implements ThreadsRunsStepsContract * Retrieves a run step. * * @see https://platform.openai.com/docs/api-reference/runs/getRunStep + * + * @throws OpenAIThrowable */ public function retrieve(string $threadId, string $runId, string $stepId): ThreadRunStepResponse { @@ -35,6 +38,8 @@ public function retrieve(string $threadId, string $runId, string $stepId): Threa * @see https://platform.openai.com/docs/api-reference/runs/listRunSteps * * @param array $parameters + * + * @throws OpenAIThrowable */ public function list(string $threadId, string $runId, array $parameters = []): ThreadRunStepListResponse { diff --git a/src/Responses/Audio/SpeechStreamResponse.php b/src/Responses/Audio/SpeechStreamResponse.php index adaadb33..f7028cc2 100644 --- a/src/Responses/Audio/SpeechStreamResponse.php +++ b/src/Responses/Audio/SpeechStreamResponse.php @@ -8,6 +8,7 @@ use OpenAI\Contracts\ResponseStreamContract; use OpenAI\Responses\Meta\MetaInformation; use Psr\Http\Message\ResponseInterface; +use RuntimeException; /** * @implements ResponseStreamContract @@ -22,6 +23,8 @@ public function __construct( /** * {@inheritDoc} + * + * @throws RuntimeException */ public function getIterator(): Generator { diff --git a/src/Responses/StreamResponse.php b/src/Responses/StreamResponse.php index f7f70923..314aa4ac 100644 --- a/src/Responses/StreamResponse.php +++ b/src/Responses/StreamResponse.php @@ -9,6 +9,7 @@ use OpenAI\Responses\Meta\MetaInformation; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; +use RuntimeException; /** * @template TResponse @@ -31,6 +32,8 @@ public function __construct( /** * {@inheritDoc} + * + * @throws ErrorException|RuntimeException */ public function getIterator(): Generator { @@ -60,6 +63,8 @@ public function getIterator(): Generator /** * Read a line from the stream. + * + * @throws RuntimeException */ private function readLine(StreamInterface $stream): string { diff --git a/src/Transporters/HttpTransporter.php b/src/Transporters/HttpTransporter.php index 37ed0d7c..b2862ad4 100644 --- a/src/Transporters/HttpTransporter.php +++ b/src/Transporters/HttpTransporter.php @@ -10,7 +10,9 @@ use OpenAI\Contracts\TransporterContract; use OpenAI\Enums\Transporter\ContentType; use OpenAI\Exceptions\ErrorException; +use OpenAI\Exceptions\OpenAIThrowable; use OpenAI\Exceptions\TransporterException; +use OpenAI\Exceptions\UnreadableResponse; use OpenAI\Exceptions\UnserializableResponse; use OpenAI\ValueObjects\Transporter\BaseUri; use OpenAI\ValueObjects\Transporter\Headers; @@ -20,6 +22,7 @@ use Psr\Http\Client\ClientExceptionInterface; use Psr\Http\Client\ClientInterface; use Psr\Http\Message\ResponseInterface; +use RuntimeException; /** * @internal @@ -48,7 +51,11 @@ public function requestObject(Payload $payload): Response $response = $this->sendRequest(fn (): \Psr\Http\Message\ResponseInterface => $this->client->sendRequest($request)); - $contents = $response->getBody()->getContents(); + try { + $contents = $response->getBody()->getContents(); + } catch (RuntimeException $exception) { + throw new UnreadableResponse($exception); + } if (str_contains($response->getHeaderLine('Content-Type'), ContentType::TEXT_PLAIN->value)) { return Response::from($contents, $response->getHeaders()); @@ -75,7 +82,11 @@ public function requestContent(Payload $payload): string $response = $this->sendRequest(fn (): \Psr\Http\Message\ResponseInterface => $this->client->sendRequest($request)); - $contents = $response->getBody()->getContents(); + try { + $contents = $response->getBody()->getContents(); + } catch (RuntimeException $exception) { + throw new UnreadableResponse($exception); + } $this->throwIfJsonError($response, $contents); @@ -96,19 +107,25 @@ public function requestStream(Payload $payload): ResponseInterface return $response; } + /** + * @throws OpenAIThrowable + */ private function sendRequest(Closure $callable): ResponseInterface { try { return $callable(); } catch (ClientExceptionInterface $clientException) { if ($clientException instanceof ClientException) { - $this->throwIfJsonError($clientException->getResponse(), $clientException->getResponse()->getBody()->getContents()); + $this->throwIfJsonError($clientException->getResponse(), $clientException->getResponse()); } throw new TransporterException($clientException); } } + /** + * @throws OpenAIThrowable + */ private function throwIfJsonError(ResponseInterface $response, string|ResponseInterface $contents): void { if ($response->getStatusCode() < 400) { @@ -120,7 +137,11 @@ private function throwIfJsonError(ResponseInterface $response, string|ResponseIn } if ($contents instanceof ResponseInterface) { - $contents = $contents->getBody()->getContents(); + try { + $contents = $response->getBody()->getContents(); + } catch (RuntimeException $exception) { + throw new UnreadableResponse($exception); + } } try { diff --git a/src/ValueObjects/Transporter/Payload.php b/src/ValueObjects/Transporter/Payload.php index 4fcb4c5a..8769d84a 100644 --- a/src/ValueObjects/Transporter/Payload.php +++ b/src/ValueObjects/Transporter/Payload.php @@ -6,9 +6,11 @@ use Http\Discovery\Psr17Factory; use Http\Message\MultipartStream\MultipartStreamBuilder; +use JsonException; use OpenAI\Contracts\Request; use OpenAI\Enums\Transporter\ContentType; use OpenAI\Enums\Transporter\Method; +use OpenAI\Exceptions\UnserializableResponse; use OpenAI\ValueObjects\ResourceUri; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\StreamInterface;