[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-8320":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":36,"readmeContent":37,"aiSummary":38,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":39,"discoverSource":40},8320,"client","openai-php\u002Fclient","openai-php","⚡️ OpenAI PHP is a supercharged community-maintained PHP API client that allows you to interact with OpenAI API.","",null,"PHP",5799,681,85,16,0,2,24,6,39.5,"MIT License",false,"main",[25,5,26,27,28,29,30,31,32,33,34,35],"api","codex","gpt-3","gpt-4","gpt-5","language","natural","openai","php","processing","sdk","2026-06-12 02:01:52","\u003Cp align=\"center\">\n    \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fopenai-php\u002Fclient\u002Fmain\u002Fart\u002Fexample.png\" width=\"600\" alt=\"OpenAI PHP\">\n    \u003Cp align=\"center\">\n        \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fopenai-php\u002Fclient\u002Factions\">\u003Cimg alt=\"GitHub Workflow Status (main)\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fopenai-php\u002Fclient\u002Ftests.yml?branch=main&label=tests&style=round-square\">\u003C\u002Fa>\n        \u003Ca href=\"https:\u002F\u002Fpackagist.org\u002Fpackages\u002Fopenai-php\u002Fclient\">\u003Cimg alt=\"Total Downloads\" src=\"https:\u002F\u002Fimg.shields.io\u002Fpackagist\u002Fdt\u002Fopenai-php\u002Fclient\">\u003C\u002Fa>\n        \u003Ca href=\"https:\u002F\u002Fpackagist.org\u002Fpackages\u002Fopenai-php\u002Fclient\">\u003Cimg alt=\"Latest Version\" src=\"https:\u002F\u002Fimg.shields.io\u002Fpackagist\u002Fv\u002Fopenai-php\u002Fclient\">\u003C\u002Fa>\n        \u003Ca href=\"https:\u002F\u002Fpackagist.org\u002Fpackages\u002Fopenai-php\u002Fclient\">\u003Cimg alt=\"License\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fopenai-php\u002Fclient\">\u003C\u002Fa>\n    \u003C\u002Fp>\n\u003C\u002Fp>\n\n------\n**OpenAI PHP** is a community-maintained PHP API client that allows you to interact with the [Open AI API](https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fintroduction).\n\n- Follow the creator Nuno Maduro:\n    - YouTube: **[youtube.com\u002F@nunomaduro](https:\u002F\u002Fwww.youtube.com\u002F@nunomaduro)** — Videos every weekday\n    - Twitch: **[twitch.tv\u002Fenunomaduro](https:\u002F\u002Fwww.twitch.tv\u002Fenunomaduro)** — Streams (almost) every weekday\n    - Twitter \u002F X: **[x.com\u002Fenunomaduro](https:\u002F\u002Fx.com\u002Fenunomaduro)**\n    - LinkedIn: **[linkedin.com\u002Fin\u002Fnunomaduro](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fnunomaduro)**\n    - Instagram: **[instagram.com\u002Fenunomaduro](https:\u002F\u002Fwww.instagram.com\u002Fenunomaduro)**\n    - Tiktok: **[tiktok.com\u002F@enunomaduro](https:\u002F\u002Fwww.tiktok.com\u002F@enunomaduro)**\n\nIf you or your business relies on this package, it's important to support the developers who have contributed their time and effort to create and maintain this valuable tool:\n\n- Nuno Maduro: **[github.com\u002Fsponsors\u002Fnunomaduro](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fnunomaduro)**\n- Sandro Gehri: **[github.com\u002Fsponsors\u002Fgehrisandro](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fgehrisandro)**\n- Connor Tumbleson: **[github.com\u002Fsponsors\u002FiBotPeaches](https:\u002F\u002Fgithub.com\u002Fsponsors\u002FiBotPeaches)**\n\n## Table of Contents\n- [Get Started](#get-started)\n- [Usage](#usage)\n  - [Models Resource](#models-resource)\n  - [Responses Resource](#responses-resource)\n  - [Conversations Resource](#conversations-resource)\n  - [Conversations Items Resource](#conversations-items-resource)\n  - [Containers Resource](#containers-resource)\n  - [Containers Files Resource](#containers-files-resource)\n  - [Chat Resource](#chat-resource)\n  - [Audio Resource](#audio-resource)\n  - [Embeddings Resource](#embeddings-resource)\n  - [Files Resource](#files-resource)\n  - [FineTuning Resource](#finetuning-resource)\n  - [Moderations Resource](#moderations-resource)\n  - [Images Resource](#images-resource)\n  - [Vector Stores Resource](#vector-stores-resource)\n  - [Vector Stores Files Resource](#vector-store-files-resource)\n  - [Vector Stores File Batches Resource](#vector-store-file-batches-resource)\n  - [Batches Resource](#batches-resource)\n  - [Realtime Ephemeral Keys](#realtime-ephemeral-keys)\n  - [Completions Resource (legacy)](#completions-resource-legacy)\n  - [Assistants Resource (deprecated)](#assistants-resource-deprecated)\n  - [Thread Resource (deprecated)](#threads-resource-deprecated)\n  - [Thread Messages Resource (deprecated)](#thread-messages-resource-deprecated)\n  - [Thread Runs Resource (deprecated)](#thread-runs-resource-deprecated)\n  - [Thread Runs Steps Resource (deprecated)](#thread-run-steps-resource-deprecated)\n  - [FineTunes Resource (deprecated)](#finetunes-resource-deprecated)\n  - [Edits Resource (deprecated)](#edits-resource-deprecated)\n- [Meta Information](#meta-information)\n- [Troubleshooting](#troubleshooting)\n- [Testing](#testing)\n- [Webhooks][#webhooks]\n- [Services](#services)\n  - [Azure](#azure)\n\n## Get Started\n\n> **Requires [PHP 8.2+](https:\u002F\u002Fwww.php.net\u002Freleases\u002F)**\n\nFirst, install OpenAI via the [Composer](https:\u002F\u002Fgetcomposer.org\u002F) package manager:\n\n```bash\ncomposer require openai-php\u002Fclient\n```\n\nEnsure that the `php-http\u002Fdiscovery` composer plugin is allowed to run or install a client manually if your project does not already have a PSR-18 client integrated.\n```bash\ncomposer require guzzlehttp\u002Fguzzle\n```\n\nThen, interact with OpenAI's API:\n\n```php\n$yourApiKey = getenv('YOUR_API_KEY');\n$client = OpenAI::client($yourApiKey);\n\n$response = $client->responses()->create([\n    'model' => 'gpt-4o',\n    'input' => 'Hello!',\n]);\n\necho $response->outputText; \u002F\u002F Hello! How can I assist you today?\n```\n\nIf necessary, it is possible to configure and create a separate client.\n\n```php\n$yourApiKey = getenv('YOUR_API_KEY');\n\n$client = OpenAI::factory()\n    ->withApiKey($yourApiKey)\n    ->withOrganization('your-organization') \u002F\u002F default: null\n    ->withProject('Your Project') \u002F\u002F default: null\n    ->withBaseUri('openai.example.com\u002Fv1') \u002F\u002F default: api.openai.com\u002Fv1\n    ->withHttpClient($httpClient = new \\GuzzleHttp\\Client([])) \u002F\u002F default: HTTP client found using PSR-18 HTTP Client Discovery\n    ->withHttpHeader('X-My-Header', 'foo')\n    ->withQueryParam('my-param', 'bar')\n    ->withStreamHandler(fn (RequestInterface $request): ResponseInterface => $httpClient->send($request, [\n        'stream' => true \u002F\u002F Allows to provide a custom stream handler for the http client.\n    ]))\n    ->make();\n```\n\n## Usage\n\n### `Models` Resource\n\n#### `list`\n\nLists the currently available models, and provides basic information about each one such as the owner and availability.\n\n```php\n$response = $client->models()->list();\n\n$response->object; \u002F\u002F 'list'\n\nforeach ($response->data as $result) {\n    $result->id; \u002F\u002F 'gpt-3.5-turbo-instruct'\n    $result->object; \u002F\u002F 'model'\n    \u002F\u002F ...\n}\n\n$response->toArray(); \u002F\u002F ['object' => 'list', 'data' => [...]]\n```\n\n#### `retrieve`\n\nRetrieves a model instance, providing basic information about the model such as the owner and permissioning.\n\n```php\n$response = $client->models()->retrieve('gpt-3.5-turbo-instruct');\n\n$response->id; \u002F\u002F 'gpt-3.5-turbo-instruct'\n$response->object; \u002F\u002F 'model'\n$response->created; \u002F\u002F 1642018370\n$response->ownedBy; \u002F\u002F 'openai'\n\n$response->toArray(); \u002F\u002F ['id' => 'gpt-3.5-turbo-instruct', ...]\n```\n\n#### `delete`\n\nDelete a fine-tuned model.\n\n```php\n$response = $client->models()->delete('curie:ft-acmeco-2021-03-03-21-44-20');\n\n$response->id; \u002F\u002F 'curie:ft-acmeco-2021-03-03-21-44-20'\n$response->object; \u002F\u002F 'model'\n$response->deleted; \u002F\u002F true\n\n$response->toArray(); \u002F\u002F ['id' => 'curie:ft-acmeco-2021-03-03-21-44-20', ...]\n```\n\n### `Responses` Resource\n\n#### `create`\n\nCreates a model response. Provide text or image inputs to generate text or JSON outputs. Have the model call your own custom code or use built-in tools like web search or file search to use your own data as input for the model's response.\n\n```php\n$response = $client->responses()->create([\n    'model' => 'gpt-4o-mini',\n    'tools' => [\n        [\n            'type' => 'web_search_preview'\n        ]\n    ],\n    'input' => \"what was a positive news story from today?\",\n    'temperature' => 0.7,\n    'max_output_tokens' => 150,\n    'tool_choice' => 'auto',\n    'parallel_tool_calls' => true,\n    'store' => true,\n    'metadata' => [\n        'user_id' => '123',\n        'session_id' => 'abc456'\n    ]\n]);\n\n$response->id; \u002F\u002F 'resp_67ccd2bed1ec8190b14f964abc054267'\n$response->object; \u002F\u002F 'response'\n$response->createdAt; \u002F\u002F 1741476542\n$response->status; \u002F\u002F 'completed'\n$response->model; \u002F\u002F 'gpt-4o-mini'\n$response->outputText; \u002F\u002F 'The combined response text of any `output_text` content.'\n\nforeach ($response->output as $output) {\n    $output->type; \u002F\u002F 'message'\n    $output->id; \u002F\u002F 'msg_67ccd2bf17f0819081ff3bb2cf6508e6'\n    $output->status; \u002F\u002F 'completed'\n    $output->role; \u002F\u002F 'assistant'\n    \n    foreach ($output->content as $content) {\n        $content->type; \u002F\u002F 'output_text'\n        $content->text; \u002F\u002F The response text\n        $content->annotations; \u002F\u002F Any annotations in the response\n    }\n}\n\n$response->usage->inputTokens; \u002F\u002F 36\n$response->usage->outputTokens; \u002F\u002F 87\n$response->usage->totalTokens; \u002F\u002F 123\n\n$response->toArray(); \u002F\u002F ['id' => 'resp_67ccd2bed1ec8190b14f964abc054267', ...]\n```\n\nCreate a model response with a function tool.\n\n```php\n$response = $client->responses()->create([\n    'model' => 'gpt-4o-mini',\n    'tools' => [\n        [\n            'type' => 'function',\n            'name' => 'get_temperature',\n            'description' => 'Get the current temperature in a given location',\n            'parameters' => [\n                'type' => 'object',\n                'properties' => [\n                    'location' => [\n                        'type' => 'string',\n                        'description' => 'The city and state, e.g. San Francisco, CA',\n                    ],\n                    'unit' => [\n                        'type' => 'string',\n                        'enum' => ['celsius', 'fahrenheit'],\n                    ],\n                ],\n                'required' => ['location'],\n            ],\n        ]\n    ],\n    'input' => \"What is the temperature in Rio Grande do Norte, Brazil?\",\n]);\n\nforeach ($response->output as $item) {\n    if ($item->type === 'function_call') {\n        $name = $item->name ?? null;\n        $args = json_decode($item->arguments ?? '{}', true) ?: [];\n\n        if ($name === 'get_temperature') {\n            \u002F\u002F ✅ Call your custom function here with the extracted arguments\n            \u002F\u002F Example:\n            \u002F\u002F $temperature = get_temperature($args['location'], $args['unit'] ?? 'celsius');\n            \u002F\u002F Then, send the result back to the model if needed.\n        }\n    }\n}\n```\n\n#### `create streamed`\n\nWhen you create a Response with stream set to true, the server will emit server-sent events to the client as the Response is generated. All events and their payloads can be found in [OpenAI docs](https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fresponses-streaming).\n\n```php\n$stream = $client->responses()->createStreamed([\n    'model' => 'gpt-4o-mini',\n    'tools' => [\n        [\n            'type' => 'web_search_preview'\n        ]\n    ],\n    'input' => \"what was a positive news story from today?\",\n]);\n\nforeach ($stream as $response) {\n    $response->event; \u002F\u002F 'response.created'\n}\n```\n\n#### `retrieve`\n\nRetrieves a model response with the given ID.\n\n```php\n$response = $client->responses()->retrieve('resp_67ccd2bed1ec8190b14f964abc054267');\n\n$response->id; \u002F\u002F 'resp_67ccd2bed1ec8190b14f964abc054267'\n$response->object; \u002F\u002F 'response'\n$response->createdAt; \u002F\u002F 1741476542\n$response->status; \u002F\u002F 'completed'\n$response->error; \u002F\u002F null\n$response->incompleteDetails; \u002F\u002F null\n$response->instructions; \u002F\u002F null\n$response->maxOutputTokens; \u002F\u002F null\n$response->model; \u002F\u002F 'gpt-4o-mini-2024-07-18\"'\n$response->parallelToolCalls; \u002F\u002F true\n$response->previousResponseId; \u002F\u002F null\n$response->store; \u002F\u002F true\n$response->temperature; \u002F\u002F 1.0\n$response->toolChoice; \u002F\u002F 'auto'\n$response->topP; \u002F\u002F 1.0\n$response->truncation; \u002F\u002F 'disabled'\n\n$response->toArray(); \u002F\u002F ['id' => 'resp_67ccd2bed1ec8190b14f964abc054267', ...]\n```\n\n#### `retrieve streamed`\n\nWhen you retrieve a Response with stream set to true, the server will emit server-sent events to the client as the Response is generated. All events and their payloads can be found in [OpenAI docs](https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fresponses-streaming).\n\n```php\n$stream = $client->responses()->retrieveStreamed('resp_67ccd2bed1ec8190b14f964abc054267', [\n    'starting_after' => '2',\n]);\n\nforeach ($stream as $response) {\n    $response->event; \u002F\u002F 'response.created'\n}\n```\n\n#### `cancel`\n\nCancel a model response (background request) with the given ID.\n\n```php\n$response = $client->responses()->cancel('resp_67ccd2bed1ec8190b14f964abc054267');\n\n$response->id; \u002F\u002F 'resp_67ccd2bed1ec8190b14f964abc054267'\n$response->status; \u002F\u002F 'canceled'\n\n$response->toArray(); \u002F\u002F ['id' => 'resp_67ccd2bed1ec8190b14f964abc054267', 'status' => 'canceled', ...]\n```\n\n#### `delete`\n\nDeletes a model response with the given ID.\n\n```php\n$response = $client->responses()->delete('resp_67ccd2bed1ec8190b14f964abc054267');\n\n$response->id; \u002F\u002F 'resp_67ccd2bed1ec8190b14f964abc054267'\n$response->object; \u002F\u002F 'response'\n$response->deleted; \u002F\u002F true\n\n$response->toArray(); \u002F\u002F ['id' => 'resp_67ccd2bed1ec8190b14f964abc054267', 'deleted' => true, ...]\n```\n\n#### `list`\n\nLists input items for a response with the given ID. All events and their payloads can be found in [OpenAI docs](https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fresponses\u002Flist).\n\n```php\n$response = $client->responses()->list('resp_67ccd2bed1ec8190b14f964abc054267', [\n    'limit' => 10,\n    'order' => 'desc'\n]);\n\n$response->object; \u002F\u002F 'list'\n\nforeach ($response->data as $item) {\n    $item->type; \u002F\u002F 'message'\n    $item->id; \u002F\u002F 'msg_680bf4e8c1948192b64abf0bad54b30806e0834f49400fc3'\n    $item->status; \u002F\u002F 'completed'\n    $item->role; \u002F\u002F 'user'\n}\n\n$response->firstId; \u002F\u002F 'msg_680bf4e8c1948192b64abf0bad54b30806e0834f49400fc3'\n$response->lastId; \u002F\u002F 'msg_680bf4e8c1948192b64abf0bad54b30806e0834f49400fc3'\n$response->hasMore; \u002F\u002F false\n\n$response->toArray(); \u002F\u002F ['object' => 'list', 'data' => [...], ...]\n```\n\n### `Conversations` Resource\n\n#### `create`\n\nCreate a conversation.\n\n```php\n$response = $client->conversations()->create([\n    'metadata' => ['topic' => 'demo'],\n    'items' => [\n        [\n            'type' => 'message',\n            'role' => 'user',\n            'content' => 'Hello!'\n        ],\n    ],\n]);\n\n$response->id; \u002F\u002F 'conv_123'\n$response->object; \u002F\u002F 'conversation'\n$response->createdAt; \u002F\u002F 1741900000\n$response->metadata; \u002F\u002F ['topic' => 'demo']\n\n$response->toArray(); \u002F\u002F ['id' => 'conv_123', 'object' => 'conversation', ...]\n```\n\n#### `retrieve`\n\nRetrieve a conversation by ID.\n\n```php\n$response = $client->conversations()->retrieve('conv_123');\n\n$response->id; \u002F\u002F 'conv_123'\n$response->object; \u002F\u002F 'conversation'\n$response->createdAt; \u002F\u002F 1741900000\n\n$response->toArray(); \u002F\u002F ['id' => 'conv_123', 'object' => 'conversation', ...]\n```\n\n#### `update`\n\nUpdate a conversation by ID.\n\n```php\n$response = $client->conversations()->update('conv_123', [\n    'metadata' => ['foo' => 'bar'],\n]);\n\n$response->id; \u002F\u002F 'conv_123'\n$response->metadata; \u002F\u002F ['foo' => 'bar']\n```\n\n#### `delete`\n\nDelete a conversation by ID.\n\n```php\n$response = $client->conversations()->delete('conv_123');\n\n$response->id; \u002F\u002F 'conv_123'\n$response->object; \u002F\u002F 'conversation.deleted'\n$response->deleted; \u002F\u002F true\n\n$response->toArray(); \u002F\u002F ['id' => 'conv_123', 'object' => 'conversation.deleted', 'deleted' => true]\n```\n\n### `Conversations Items` Resource\n\n#### `create`\n\nCreate items for a conversation.\n\n```php\n$response = $client->conversations()->items()->create('conv_123', [\n    'items' => [\n        [\n            'role' => 'system',\n            'content' => 'Refer to me as PHPBot.',\n        ],\n    ],\n]);\n\nforeach ($response->data as $listItem) {\n    $listItem->item; \u002F\u002F The created item (e.g., message)\n}\n\n$response->firstId; \u002F\u002F 'msg_abc'\n$response->lastId; \u002F\u002F 'msg_abc'\n$response->hasMore; \u002F\u002F false\n\n$response->toArray(); \u002F\u002F ['object' => 'list', 'data' => [...], ...]\n```\n\n#### `list`\n\nList items for a conversation.\n\n```php\n$response = $client->conversations()->items()->list('conv_123', [\n    'limit' => 10,\n]);\n\n$response->object; \u002F\u002F 'list'\n```\n\n#### `retrieve`\n\nRetrieve a specific item from a conversation.\n\n```php\n$response = $client->conversations()->items()->retrieve('conv_123', 'msg_abc', [\n    'include' => ['step_details'],\n]);\n\n$response->id; \u002F\u002F 'msg_abc'\n$response->type; \u002F\u002F 'message'\n$response->status; \u002F\u002F 'completed'\n```\n\n#### `delete`\n\nDelete a specific item from a conversation. Returns the updated conversation.\n\n```php\n$response = $client->conversations()->items()->delete('conv_123', 'msg_abc');\n\n$response->id; \u002F\u002F 'conv_123'\n$response->object; \u002F\u002F 'conversation'\n```\n\n### `Containers` Resource\n\n#### `create`\n\nCreates a container for use with the Code Interpreter tool.\n\n```php\n$response = $client->containers()->create([\n    'name' => 'My Container',\n    'expires_after' => [\n        'anchor' => 'last_active_at',\n        'minutes' => 60,\n    ],\n]);\n\n$response->id; \u002F\u002F 'container_abc123'\n$response->object; \u002F\u002F 'container'\n$response->createdAt; \u002F\u002F 1690000000\n$response->status; \u002F\u002F 'active'\n$response->expiresAfter->anchor; \u002F\u002F 'last_active_at'\n$response->expiresAfter->minutes; \u002F\u002F 60\n$response->lastActiveAt; \u002F\u002F 1690001000\n$response->name; \u002F\u002F 'My Container'\n\n$response->toArray(); \u002F\u002F ['id' => 'container_abc123', 'object' => 'container', ...]\n```\n\n#### `list`\n\nReturns a list of containers.\n\n```php\n$response = $client->containers()->list([\n    'limit' => 10,\n    'order' => 'desc',\n]);\n\n$response->object; \u002F\u002F 'list'\n\nforeach ($response->data as $container) {\n    $container->id; \u002F\u002F 'container_abc123'\n    $container->object; \u002F\u002F 'container'\n    $container->createdAt; \u002F\u002F 1690000000\n    $container->status; \u002F\u002F 'active'\n    $container->expiresAfter->anchor; \u002F\u002F 'last_active_at'\n    $container->expiresAfter->minutes; \u002F\u002F 60\n    $container->lastActiveAt; \u002F\u002F 1690001000\n    $container->name; \u002F\u002F 'Test Container'\n}\n\n$response->firstId; \u002F\u002F 'container_abc123'\n$response->lastId; \u002F\u002F 'container_def456'\n$response->hasMore; \u002F\u002F false\n\n$response->toArray(); \u002F\u002F ['object' => 'list', 'data' => [...], ...]\n```\n\n#### `retrieve`\n\nRetrieves a container with the given ID.\n\n```php\n$response = $client->containers()->retrieve('container_abc123');\n\n$response->id; \u002F\u002F 'container_abc123'\n$response->object; \u002F\u002F 'container'\n$response->createdAt; \u002F\u002F 1690000000\n$response->status; \u002F\u002F 'active'\n$response->expiresAfter->anchor; \u002F\u002F 'last_active_at'\n$response->expiresAfter->minutes; \u002F\u002F 60\n$response->lastActiveAt; \u002F\u002F 1690001000\n$response->name; \u002F\u002F 'Test Container'\n\n$response->toArray(); \u002F\u002F ['id' => 'container_abc123', 'object' => 'container', ...]\n```\n\n#### `delete`\n\nDelete a container with the given ID.\n\n```php\n$response = $client->containers()->delete('container_abc123');\n\n$response->id; \u002F\u002F 'container_abc123'\n$response->object; \u002F\u002F 'container'\n$response->deleted; \u002F\u002F true\n\n$response->toArray(); \u002F\u002F ['id' => 'container_abc123', 'object' => 'container', 'deleted' => true]\n```\n\n### `Containers Files` Resource\n\n#### `create`\n\nCreate or upload a file into a container.\n\n```php\n$response = $client->containers()->files()->create('container_abc123', [\n    'file' => fopen('path\u002Fto\u002Flocal-file.txt', 'r'),\n]);\n$response = $client->containers()->files()->create('container_abc123', [\n    'file_id' => 'file_XjGxS3KTG0uNmNOK362iJua3',\n]);\n\n$response->id; \u002F\u002F 'cfile_682e0e8a43c88191a7978f477a09bdf5'\n$response->object; \u002F\u002F 'container.file'\n$response->createdAt; \u002F\u002F 1747848842\n$response->bytes; \u002F\u002F 880\n$response->containerId; \u002F\u002F 'container_abc123'\n$response->path; \u002F\u002F '\u002Fmnt\u002Fdata\u002Flocal-file.txt'\n$response->source; \u002F\u002F 'user'\n\n$response->toArray(); \u002F\u002F ['id' => 'cfile_...', 'object' => 'container.file', ...]\n```\n\n> [!NOTE]\n> You must provide either `file` or `file_id`, but not both.\n\n#### `list`\n\nReturns a list of files in the container.\n\n```php\n$response = $client->containers()->files()->list('container_abc123', [\n    'limit' => 10,\n    'order' => 'desc',\n]);\n\n$response->object; \u002F\u002F 'list'\n\nforeach ($response->data as $file) {\n    $file->id; \u002F\u002F 'cfile_682e0e8a43c88191a7978f477a09bdf5'\n    $file->object; \u002F\u002F 'container.file'\n    $file->createdAt; \u002F\u002F 1747848842\n    $file->bytes; \u002F\u002F 880\n    $file->containerId; \u002F\u002F 'container_abc123'\n    $file->path; \u002F\u002F '\u002Fmnt\u002Fdata\u002F...' \n    $file->source; \u002F\u002F 'user'\n}\n\n$response->firstId; \u002F\u002F 'cfile_...'\n$response->lastId; \u002F\u002F 'cfile_...'\n$response->hasMore; \u002F\u002F false\n\n$response->toArray(); \u002F\u002F ['object' => 'list', 'data' => [...], ...]\n```\n\n#### `retrieve`\n\nRetrieve information about a container file.\n\n```php\n$response = $client->containers()->files()->retrieve('container_abc123', 'cfile_682e0e8a43c88191a7978f477a09bdf5');\n\n$response->id; \u002F\u002F 'cfile_682e0e8a43c88191a7978f477a09bdf5'\n$response->object; \u002F\u002F 'container.file'\n$response->createdAt; \u002F\u002F 1747848842\n$response->bytes; \u002F\u002F 880\n$response->containerId; \u002F\u002F 'container_abc123'\n$response->path; \u002F\u002F '\u002Fmnt\u002Fdata\u002F...'\n$response->source; \u002F\u002F 'user'\n\n$response->toArray(); \u002F\u002F ['id' => 'cfile_...', 'object' => 'container.file', ...]\n```\n\n#### `retrieve content`\n\nReturns the raw content of the specified container file.\n\n```php\n$content = $client->containers()->files()->content('container_abc123', 'cfile_682e0e8a43c88191a7978f477a09bdf5');\n\u002F\u002F $content => string\n```\n\n#### `delete`\n\nDelete a container file.\n\n```php\n$response = $client->containers()->files()->delete('container_abc123', 'cfile_682e0e8a43c88191a7978f477a09bdf5');\n\n$response->id; \u002F\u002F 'cfile_682e0e8a43c88191a7978f477a09bdf5'\n$response->object; \u002F\u002F 'container.file.deleted'\n$response->deleted; \u002F\u002F true\n\n$response->toArray(); \u002F\u002F ['id' => 'cfile_...', 'object' => 'container.file.deleted', 'deleted' => true]\n```\n\n### `Chat` Resource\n\n#### `create`\n\nCreates a completion for the chat message.\n\n```php\n$response = $client->chat()->create([\n    'model' => 'gpt-3.5-turbo',\n    'messages' => [\n        ['role' => 'user', 'content' => 'Hello!'],\n    ],\n]);\n\n$response->id; \u002F\u002F 'chatcmpl-6pMyfj1HF4QXnfvjtfzvufZSQq6Eq'\n$response->object; \u002F\u002F 'chat.completion'\n$response->created; \u002F\u002F 1677701073\n$response->model; \u002F\u002F 'gpt-3.5-turbo-0301'\n\nforeach ($response->choices as $choice) {\n    $choice->index; \u002F\u002F 0\n    $choice->message->role; \u002F\u002F 'assistant'\n    $choice->message->content; \u002F\u002F '\\n\\nHello there! How can I assist you today?'\n    $choice->logprobs; \u002F\u002F null\n    $choice->finishReason; \u002F\u002F 'stop'\n}\n\n$response->usage->promptTokens; \u002F\u002F 9,\n$response->usage->completionTokens; \u002F\u002F 12,\n$response->usage->totalTokens; \u002F\u002F 21\n\n$response->toArray(); \u002F\u002F ['id' => 'chatcmpl-6pMyfj1HF4QXnfvjtfzvufZSQq6Eq', ...]\n```\n\nCreates a completion for the chat message with a tool call.\n\n```php\n$response = $client->chat()->create([\n    'model' => 'gpt-3.5-turbo-0613',\n    'messages' => [\n        ['role' => 'user', 'content' => 'What\\'s the weather like in Boston?'],\n    ],\n    'tools' => [\n        [\n            'type' => 'function',\n            'function' => [\n                'name' => 'get_current_weather',\n                'description' => 'Get the current weather in a given location',\n                'parameters' => [\n                    'type' => 'object',\n                    'properties' => [\n                        'location' => [\n                            'type' => 'string',\n                            'description' => 'The city and state, e.g. San Francisco, CA',\n                        ],\n                        'unit' => [\n                            'type' => 'string',\n                            'enum' => ['celsius', 'fahrenheit']\n                        ],\n                    ],\n                    'required' => ['location'],\n                ],\n            ],\n        ]\n    ]\n]);\n\n$response->id; \u002F\u002F 'chatcmpl-6pMyfj1HF4QXnfvjtfzvufZSQq6Eq'\n$response->object; \u002F\u002F 'chat.completion'\n$response->created; \u002F\u002F 1677701073\n$response->model; \u002F\u002F 'gpt-3.5-turbo-0613'\n\nforeach ($response->choices as $choice) {\n    $choice->index; \u002F\u002F 0\n    $choice->message->role; \u002F\u002F 'assistant'\n    $choice->message->content; \u002F\u002F null\n    $choice->message->toolCalls[0]->id; \u002F\u002F 'call_123'\n    $choice->message->toolCalls[0]->type; \u002F\u002F 'function'\n    $choice->message->toolCalls[0]->function->name; \u002F\u002F 'get_current_weather'\n    $choice->message->toolCalls[0]->function->arguments; \u002F\u002F \"{\\n  \\\"location\\\": \\\"Boston, MA\\\"\\n}\"\n    $choice->finishReason; \u002F\u002F 'tool_calls'\n}\n\n$response->usage->promptTokens; \u002F\u002F 82,\n$response->usage->completionTokens; \u002F\u002F 18,\n$response->usage->totalTokens; \u002F\u002F 100\n```\n\nCreates a completion for the chat message with a function call.\n\n```php\n$response = $client->chat()->create([\n    'model' => 'gpt-3.5-turbo-0613',\n    'messages' => [\n        ['role' => 'user', 'content' => 'What\\'s the weather like in Boston?'],\n    ],\n    'functions' => [\n        [\n            'name' => 'get_current_weather',\n            'description' => 'Get the current weather in a given location',\n            'parameters' => [\n                'type' => 'object',\n                'properties' => [\n                    'location' => [\n                        'type' => 'string',\n                        'description' => 'The city and state, e.g. San Francisco, CA',\n                    ],\n                    'unit' => [\n                        'type' => 'string',\n                        'enum' => ['celsius', 'fahrenheit']\n                    ],\n                ],\n                'required' => ['location'],\n            ],\n        ]\n    ]\n]);\n\n$response->id; \u002F\u002F 'chatcmpl-6pMyfj1HF4QXnfvjtfzvufZSQq6Eq'\n$response->object; \u002F\u002F 'chat.completion'\n$response->created; \u002F\u002F 1677701073\n$response->model; \u002F\u002F 'gpt-3.5-turbo-0613'\n\nforeach ($response->choices as $choice) {\n    $choice->index; \u002F\u002F 0\n    $choice->message->role; \u002F\u002F 'assistant'\n    $choice->message->content; \u002F\u002F null\n    $choice->message->functionCall->name; \u002F\u002F 'get_current_weather'\n    $choice->message->functionCall->arguments; \u002F\u002F \"{\\n  \\\"location\\\": \\\"Boston, MA\\\"\\n}\"\n    $choice->finishReason; \u002F\u002F 'function_call'\n}\n\n$response->usage->promptTokens; \u002F\u002F 82,\n$response->usage->completionTokens; \u002F\u002F 18,\n$response->usage->totalTokens; \u002F\u002F 100\n```\n\nCreates a chat completion with image input via `image_url`.  \nUseful for describing and analyzing visual content.\n\n```php\n$response = $client->chat()->create([\n    'model' => 'gpt-4o',\n    'messages' => [\n        [\n            'role' => 'user',\n            'content' => [\n                ['type' => 'text', 'text' => 'What is in this image?'],\n                \u002F\u002F Replace with a real, accessible image\n                ['type' => 'image_url', 'image_url' => ['url' => 'https:\u002F\u002Fexample.com\u002Fimage.jpg']], \n            ]\n        ]\n    ]\n]);\n```\n\n#### `create streamed`\n\nCreates a streamed completion for the chat message.\n\n```php\n$stream = $client->chat()->createStreamed([\n    'model' => 'gpt-4o',\n    'messages' => [\n        ['role' => 'user', 'content' => 'Hello!'],\n    ],\n]);\n\nforeach($stream as $response){\n    $response->choices[0]->toArray();\n}\n\u002F\u002F 1. iteration => ['index' => 0, 'delta' => ['role' => 'assistant'], 'finish_reason' => null]\n\u002F\u002F 2. iteration => ['index' => 0, 'delta' => ['content' => 'Hello'], 'finish_reason' => null]\n\u002F\u002F 3. iteration => ['index' => 0, 'delta' => ['content' => '!'], 'finish_reason' => null]\n\u002F\u002F ...\n```\n\nTo get usage report when using stream you can use `include_usage` in `stream_options` .\n\n```php\n$stream = $client->chat()->createStreamed([\n    'model' => 'gpt-4',\n    'messages' => [\n        ['role' => 'user', 'content' => 'Hello!'],\n    ],\n    'stream_options'=>[\n        'include_usage' => true,\n    ]\n]);\n\nforeach($stream as $response){\n    if($response->usage !== null){\n        $response->usage->promptTokens; \u002F\u002F 9,\n        $response->usage->completionTokens; \u002F\u002F 12,\n        $response->usage->totalTokens; \u002F\u002F 21\n    }\n}\n```\n\n`usage` is always `null` except for the last chunk which contains the token usage statistics for the entire request.\n\n### `Audio` Resource\n\n#### `speech`\n\nGenerates audio from the input text.\n\n```php\n$client->audio()->speech([\n    'model' => 'tts-1',\n    'input' => 'The quick brown fox jumped over the lazy dog.',\n    'voice' => 'alloy',\n]); \u002F\u002F audio file content as string\n```\n\n#### `speechStreamed`\n\nGenerates streamed audio from the input text.\n\n```php\n$stream = $client->audio()->speechStreamed([\n    'model' => 'tts-1',\n    'input' => 'The quick brown fox jumped over the lazy dog.',\n    'voice' => 'alloy',\n]);\n\nforeach($stream as $chunk){\n    $chunk; \u002F\u002F chunk of audio file content as string\n}\n```\n\n#### `transcribe`\n\nTranscribes audio into the input language.\n\n```php\n$response = $client->audio()->transcribe([\n    'model' => 'whisper-1',\n    'file' => fopen('audio.mp3', 'r'),\n    'response_format' => 'verbose_json',\n    'timestamp_granularities' => ['segment', 'word']\n]);\n\n$response->task; \u002F\u002F 'transcribe'\n$response->language; \u002F\u002F 'english'\n$response->duration; \u002F\u002F 2.95\n$response->text; \u002F\u002F 'Hello, how are you?'\n\nforeach ($response->segments as $segment) {\n    $segment->index; \u002F\u002F 0\n    $segment->seek; \u002F\u002F 0\n    $segment->start; \u002F\u002F 0.0\n    $segment->end; \u002F\u002F 4.0\n    $segment->text; \u002F\u002F 'Hello, how are you?'\n    $segment->tokens; \u002F\u002F [50364, 2425, 11, 577, 366, 291, 30, 50564]\n    $segment->temperature; \u002F\u002F 0.0\n    $segment->avgLogprob; \u002F\u002F -0.45045216878255206\n    $segment->compressionRatio; \u002F\u002F 0.7037037037037037\n    $segment->noSpeechProb; \u002F\u002F 0.1076972484588623\n    $segment->transient; \u002F\u002F false\n}\n\nforeach ($response->words as $word) {\n    $word->word; \u002F\u002F 'Hello'\n    $word->start; \u002F\u002F 0.31\n    $word->end; \u002F\u002F 0.92\n}\n\n$response->toArray(); \u002F\u002F ['task' => 'transcribe', ...]\n```\n\n#### `transcribe streamed`\n\nTranscribes audio into the input language with streaming.\n\n```php\n$stream = $client->audio()->transcribeStreamed([\n    'model' => 'gpt-4o-transcribe',\n    'file' => fopen('audio.mp3', 'r'),\n]);\n\nforeach ($stream as $event) {\n    echo json_encode($event->toArray()); \u002F\u002F {\"event\":\"transcript.text.delta\",\"data\":{\"delta\":\"The\"}}\n}\n```\n\n#### `translate`\n\nTranslates audio into English.\n\n```php\n$response = $client->audio()->translate([\n    'model' => 'whisper-1',\n    'file' => fopen('german.mp3', 'r'),\n    'response_format' => 'verbose_json',\n]);\n\n$response->task; \u002F\u002F 'translate'\n$response->language; \u002F\u002F 'english'\n$response->duration; \u002F\u002F 2.95\n$response->text; \u002F\u002F 'Hello, how are you?'\n\nforeach ($response->segments as $segment) {\n    $segment->index; \u002F\u002F 0\n    $segment->seek; \u002F\u002F 0\n    $segment->start; \u002F\u002F 0.0\n    $segment->end; \u002F\u002F 4.0\n    $segment->text; \u002F\u002F 'Hello, how are you?'\n    $segment->tokens; \u002F\u002F [50364, 2425, 11, 577, 366, 291, 30, 50564]\n    $segment->temperature; \u002F\u002F 0.0\n    $segment->avgLogprob; \u002F\u002F -0.45045216878255206\n    $segment->compressionRatio; \u002F\u002F 0.7037037037037037\n    $segment->noSpeechProb; \u002F\u002F 0.1076972484588623\n    $segment->transient; \u002F\u002F false\n}\n\n$response->toArray(); \u002F\u002F ['task' => 'translate', ...]\n```\n\n### `Embeddings` Resource\n\n#### `create`\n\nCreates an embedding vector representing the input text.\n\n```php\n$response = $client->embeddings()->create([\n    'model' => 'text-similarity-babbage-001',\n    'input' => 'The food was delicious and the waiter...',\n]);\n\n$response->object; \u002F\u002F 'list'\n\nforeach ($response->embeddings as $embedding) {\n    $embedding->object; \u002F\u002F 'embedding'\n    $embedding->model; \u002F\u002F 'text-similarity-babbage-001'\n    $embedding->embedding; \u002F\u002F [0.018990106880664825, -0.0073809814639389515, ...]\n    $embedding->index; \u002F\u002F 0\n}\n\n$response->usage->promptTokens; \u002F\u002F 8,\n$response->usage->totalTokens; \u002F\u002F 8\n\n$response->toArray(); \u002F\u002F ['data' => [...], ...]\n```\n\n### `Files` Resource\n\n#### `list`\n\nReturns a list of files that belong to the user's organization.\n\n```php\n$response = $client->files()->list();\n\n$response->object; \u002F\u002F 'list'\n\nforeach ($response->data as $result) {\n    $result->id; \u002F\u002F 'file-XjGxS3KTG0uNmNOK362iJua3'\n    $result->object; \u002F\u002F 'file'\n    \u002F\u002F ...\n}\n\n$response->toArray(); \u002F\u002F ['object' => 'list', 'data' => [...]]\n```\n\n#### `delete`\n\nDelete a file.\n\n```php\n$response = $client->files()->delete($file);\n\n$response->id; \u002F\u002F 'file-XjGxS3KTG0uNmNOK362iJua3'\n$response->object; \u002F\u002F 'file'\n$response->deleted; \u002F\u002F true\n\n$response->toArray(); \u002F\u002F ['id' => 'file-XjGxS3KTG0uNmNOK362iJua3', ...]\n```\n\n#### `retrieve`\n\nReturns information about a specific file.\n\n```php\n$response = $client->files()->retrieve('file-XjGxS3KTG0uNmNOK362iJua3');\n\n$response->id; \u002F\u002F 'file-XjGxS3KTG0uNmNOK362iJua3'\n$response->object; \u002F\u002F 'file'\n$response->bytes; \u002F\u002F 140\n$response->createdAt; \u002F\u002F 1613779657\n$response->filename; \u002F\u002F 'mydata.jsonl'\n$response->purpose; \u002F\u002F 'fine-tune'\n$response->status; \u002F\u002F 'succeeded'\n$response->status_details; \u002F\u002F null\n\n$response->toArray(); \u002F\u002F ['id' => 'file-XjGxS3KTG0uNmNOK362iJua3', ...]\n```\n\n#### `upload`\n\nUpload a file that contains document(s) to be used across various endpoints\u002Ffeatures.\n\n```php\n$response = $client->files()->upload([\n        'purpose' => 'fine-tune',\n        'file' => fopen('my-file.jsonl', 'r'),\n    ]);\n\n$response->id; \u002F\u002F 'file-XjGxS3KTG0uNmNOK362iJua3'\n$response->object; \u002F\u002F 'file'\n$response->bytes; \u002F\u002F 140\n$response->createdAt; \u002F\u002F 1613779657\n$response->filename; \u002F\u002F 'mydata.jsonl'\n$response->purpose; \u002F\u002F 'fine-tune'\n$response->status; \u002F\u002F 'succeeded'\n$response->status_details; \u002F\u002F null\n\n$response->toArray(); \u002F\u002F ['id' => 'file-XjGxS3KTG0uNmNOK362iJua3', ...]\n```\n\n#### `download`\n\nReturns the contents of the specified file.\n\n```php\n$client->files()->download($file); \u002F\u002F '{\"prompt\": \"\u003Cprompt text>\", ...'\n```\n\n### `FineTuning` Resource\n\n#### `create job`\n\nCreates a job that fine-tunes a specified model from a given dataset.\n\n```php\n$response = $client->fineTuning()->createJob([\n    'training_file' => 'file-abc123',\n    'validation_file' => null,\n    'model' => 'gpt-3.5-turbo',\n    'hyperparameters' => [\n        'n_epochs' => 4,\n    ],\n    'suffix' => null,\n]);\n\n$response->id; \u002F\u002F 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F'\n$response->object; \u002F\u002F 'fine_tuning.job'\n$response->model; \u002F\u002F 'gpt-3.5-turbo-0613'\n$response->fineTunedModel; \u002F\u002F null\n\u002F\u002F ...\n\n$response->toArray(); \u002F\u002F ['id' => 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F', ...]\n```\n\n#### `list jobs`\n\nList your organization's fine-tuning jobs.\n\n```php\n$response = $client->fineTuning()->listJobs();\n\n$response->object; \u002F\u002F 'list'\n\nforeach ($response->data as $result) {\n    $result->id; \u002F\u002F 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F'\n    $result->object; \u002F\u002F 'fine_tuning.job'\n    \u002F\u002F ...\n}\n\n$response->toArray(); \u002F\u002F ['object' => 'list', 'data' => [...]]\n```\n\nYou can pass additional parameters to the `listJobs` method to narrow down the results.\n\n```php\n$response = $client->fineTuning()->listJobs([\n    'limit' => 3, \u002F\u002F Number of jobs to retrieve (Default: 20)\n    'after' => 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F', \u002F\u002F Identifier for the last job from the previous pagination request.\n]);\n```\n\n#### `retrieve job`\n\nGet info about a fine-tuning job.\n\n```php\n$response = $client->fineTuning()->retrieveJob('ftjob-AF1WoRqd3aJAHsqc9NY7iL8F');\n\n$response->id; \u002F\u002F 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F'\n$response->object; \u002F\u002F 'fine_tuning.job'\n$response->model; \u002F\u002F 'gpt-3.5-turbo-0613'\n$response->createdAt; \u002F\u002F 1614807352\n$response->finishedAt; \u002F\u002F 1692819450\n$response->fineTunedModel; \u002F\u002F 'ft:gpt-3.5-turbo-0613:jwe-dev::7qnxQ0sQ'\n$response->organizationId; \u002F\u002F 'org-jwe45798ASN82s'\n$response->resultFiles[0]; \u002F\u002F 'file-1bl05WrhsKDDEdg8XSP617QF'\n$response->status; \u002F\u002F 'succeeded'\n$response->validationFile; \u002F\u002F null\n$response->trainingFile; \u002F\u002F 'file-abc123'\n$response->trainedTokens; \u002F\u002F 5049\n\n$response->hyperparameters->nEpochs; \u002F\u002F 9\n\n$response->toArray(); \u002F\u002F ['id' => 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F', ...]\n```\n\n#### `cancel job`\n\nImmediately cancel a fine-tune job.\n\n```php\n$response = $client->fineTuning()->cancelJob('ftjob-AF1WoRqd3aJAHsqc9NY7iL8F');\n\n$response->id; \u002F\u002F 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F'\n$response->object; \u002F\u002F 'fine_tuning.job'\n\u002F\u002F ...\n$response->status; \u002F\u002F 'cancelled'\n\u002F\u002F ...\n\n$response->toArray(); \u002F\u002F ['id' => 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F', ...]\n```\n\n#### `list job events`\n\nGet status updates for a fine-tuning job.\n\n```php\n$response = $client->fineTuning()->listJobEvents('ftjob-AF1WoRqd3aJAHsqc9NY7iL8F');\n\n$response->object; \u002F\u002F 'list'\n\nforeach ($response->data as $result) {\n    $result->object; \u002F\u002F 'fine_tuning.job.event' \n    $result->createdAt; \u002F\u002F 1614807352\n    \u002F\u002F ...\n}\n\n$response->toArray(); \u002F\u002F ['object' => 'list', 'data' => [...]]\n```\n\nYou can pass additional parameters to the `listJobEvents` method to narrow down the results.\n\n```php\n$response = $client->fineTuning()->listJobEvents('ftjob-AF1WoRqd3aJAHsqc9NY7iL8F', [\n    'limit' => 3, \u002F\u002F Number of events to retrieve (Default: 20)\n    'after' => 'ftevent-kLPSMIcsqshEUEJVOVBVcHlP', \u002F\u002F Identifier for the last event from the previous pagination request.\n]);\n```\n\n### `Moderations` Resource\n\n#### `create`\n\nClassifies if text violates OpenAI's Content Policy.\n\n```php\n\n$response = $client->moderations()->create([\n    'model' => 'text-moderation-latest',\n    'input' => 'I want to k*** them.',\n]);\n\n$response->id; \u002F\u002F modr-5xOyuS\n$response->model; \u002F\u002F text-moderation-003\n\nforeach ($response->results as $result) {\n    $result->flagged; \u002F\u002F true\n\n    foreach ($result->categories as $category) {\n        $category->category->value; \u002F\u002F 'violence'\n        $category->violated; \u002F\u002F true\n        $category->score; \u002F\u002F 0.97431367635727\n    }\n}\n\n$response->toArray(); \u002F\u002F ['id' => 'modr-5xOyuS', ...]\n```\n\n### `Images` Resource\n\n#### `create`\n\nCreates an image given a prompt.\n\n```php\n$response = $client->images()->create([\n    'model' => 'dall-e-3',\n    'prompt' => 'A cute baby sea otter',\n    'n' => 1,\n    'size' => '1024x1024',\n    'response_format' => 'url',\n]);\n\n$response->created; \u002F\u002F 1589478378\n\nforeach ($response->data as $data) {\n    $data->url; \u002F\u002F 'https:\u002F\u002Foaidalleapiprodscus.blob.core.windows.net\u002Fprivate\u002F...'\n    $data->b64_json; \u002F\u002F null\n}\n\n$response->toArray(); \u002F\u002F ['created' => 1589478378, data => ['url' => 'https:\u002F\u002Foaidalleapiprodscus...', ...]]\n```\n\n#### `create streamed`\n\nWhen you create an image with stream set to true, the server will emit server-sent events to the client as the image is generated. All events and their payloads can be found in [OpenAI docs](https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fimages-streaming).\n\n```php\n$stream = $client->images()->createStreamed([\n    'model' => 'gpt-image-1',\n    'prompt' => 'A cute baby sea otter',\n    'n' => 1,\n    'size' => '1024x1024',\n    'response_format' => 'url',\n]);\n\nforeach ($stream as $image) {\n    $image->type; \u002F\u002F 'image_generation.partial_image'\n}\n```\n\n#### `edit`\n\nCreates an edited or extended image given an original image and a prompt.\n\n```php\n$response = $client->images()->edit([\n    'image' => fopen('image_edit_original.png', 'r'),\n    'mask' => fopen('image_edit_mask.png', 'r'),\n    'prompt' => 'A sunlit indoor lounge area with a pool containing a flamingo',\n    'n' => 1,\n    'size' => '256x256',\n    'response_format' => 'url',\n]);\n\n$response->created; \u002F\u002F 1589478378\n\nforeach ($response->data as $data) {\n    $data->url; \u002F\u002F 'https:\u002F\u002Foaidalleapiprodscus.blob.core.windows.net\u002Fprivate\u002F...'\n    $data->b64_json; \u002F\u002F null\n}\n\n$response->toArray(); \u002F\u002F ['created' => 1589478378, data => ['url' => 'https:\u002F\u002Foaidalleapiprodscus...', ...]]\n```\n\n#### `edit streamed`\n\nWhen you edit an image with stream set to true, the server will emit server-sent events to the client as the image is generated. All events and their payloads can be found in [OpenAI docs](https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fimages-streaming).\n\n```php\n$stream = $client->images()->editStreamed([\n    'model' => 'gpt-image-1',\n    'prompt' => 'A cute baby sea otter',\n    'n' => 1,\n    'size' => '1024x1024',\n    'response_format' => 'url',\n]);\n\nforeach ($stream as $image) {\n    $image->type; \u002F\u002F 'image_generation.partial_image'\n}\n```\n\n#### `variation`\n\nCreates a variation of a given image.\n\n```php\n$response = $client->images()->variation([\n    'image' => fopen('image_edit_original.png', 'r'),\n    'n' => 1,\n    'size' => '256x256',\n    'response_format' => 'url',\n]);\n\n$response->created; \u002F\u002F 1589478378\n\nforeach ($response->data as $data) {\n    $data->url; \u002F\u002F 'https:\u002F\u002Foaidalleapiprodscus.blob.core.windows.net\u002Fprivate\u002F...'\n    $data->b64_json; \u002F\u002F null\n}\n\n$response->toArray(); \u002F\u002F ['created' => 1589478378, data => ['url' => 'https:\u002F\u002Foaidalleapiprodscus...', ...]]\n```\n\n### `Batches` Resource\n\n#### `create`\n\nCreates a batch.\n\n```php\n\n$fileResponse = $client->files()->upload(\n     parameters: [\n          'purpose' => 'batch',\n          'file' => fopen('commands.jsonl', 'r'),\n    ]\n);\n\n$fileId = $fileResponse->id;\n\n$response = $client->batches()->create(\n    parameters: [\n        'input_file_id' => $fileId,\n        'endpoint' => '\u002Fv1\u002Fchat\u002Fcompletions',\n        'completion_window' => '24h'\n    ]\n );\n\n$response->id; \u002F\u002F 'batch_abc123'\n$response->object; \u002F\u002F 'batch'\n$response->endpoint; \u002F\u002F \u002Fv1\u002Fchat\u002Fcompletions\n$response->errors; \u002F\u002F null\n$response->completionWindow; \u002F\u002F '24h'\n$response->status; \u002F\u002F 'validating'\n$response->outputFileId; \u002F\u002F null\n$response->errorFileId; \u002F\u002F null\n$response->createdAt; \u002F\u002F 1714508499\n$response->inProgressAt; \u002F\u002F null\n$response->expiresAt; \u002F\u002F 1714536634\n$response->completedAt; \u002F\u002F null\n$response->failedAt; \u002F\u002F null\n$response->expiredAt; \u002F\u002F null\n$response->requestCounts; \u002F\u002F null\n$response->metadata; \u002F\u002F ['name' => 'My batch name']\n\n$response->toArray(); \u002F\u002F ['id' => 'batch_abc123', ...]\n```\n\n#### `retrieve`\n\nRetrieves a batch.\n\n```php\n$response = $client->batches()->retrieve(id: 'batch_abc123');\n\n$response->id; \u002F\u002F 'batch_abc123'\n$response->object; \u002F\u002F 'batch'\n$response->endpoint; \u002F\u002F \u002Fv1\u002Fchat\u002Fcompletions\n$response->errors; \u002F\u002F null\n$response->completionWindow; \u002F\u002F '24h'\n$response->status; \u002F\u002F 'validating'\n$response->outputFileId; \u002F\u002F null\n$response->errorFileId; \u002F\u002F null\n$response->createdAt; \u002F\u002F 1714508499\n$response->inProgressAt; \u002F\u002F null\n$response->expiresAt; \u002F\u002F 1714536634\n$response->completedAt; \u002F\u002F null\n$response->failedAt; \u002F\u002F null\n$response->expiredAt; \u002F\u002F null\n$response->requestCounts->total; \u002F\u002F 100\n$response->requestCounts->completed; \u002F\u002F 95\n$response->requestCounts->failed; \u002F\u002F 5\n$response->metadata; \u002F\u002F ['name' => 'My batch name']\n\n$response->toArray(); \u002F\u002F ['id' => 'batch_abc123', ...]\n```\n\n#### `cancel`\n\nCancels a batch.\n\n```php\n$response = $client->batches()->cancel(id: 'batch_abc123');\n\n$response->id; \u002F\u002F 'batch_abc123'\n$response->object; \u002F\u002F 'batch'\n$response->endpoint; \u002F\u002F \u002Fv1\u002Fchat\u002Fcompletions\n$response->errors; \u002F\u002F null\n$response->completionWindow; \u002F\u002F '24h'\n$response->status; \u002F\u002F 'cancelling'\n$response->outputFileId; \u002F\u002F null\n$response->errorFileId; \u002F\u002F null\n$response->createdAt; \u002F\u002F 1711471533\n$response->inProgressAt; \u002F\u002F 1711471538\n$response->expiresAt; \u002F\u002F 1711557933\n$response->cancellingAt; \u002F\u002F 1711475133\n$response->cancelledAt; \u002F\u002F null\n$response->requestCounts->total; \u002F\u002F 100\n$response->requestCounts->completed; \u002F\u002F 23\n$response->requestCounts->failed; \u002F\u002F 1\n$response->metadata; \u002F\u002F ['name' => 'My batch name']\n\n$response->toArray(); \u002F\u002F ['id' => 'batch_abc123', ...]\n```\n\n#### `list`\n\nReturns a list of batches.\n\n```php\n$response = $client->batches()->list(\n    parameters: [\n        'limit' => 10, \n    ],\n);\n\n$response->object; \u002F\u002F 'list'\n$response->firstId; \u002F\u002F 'batch_abc123'\n$response->lastId; \u002F\u002F 'batch_abc456'\n$response->hasMore; \u002F\u002F true\n\nforeach ($response->data as $result) {\n    $result->id; \u002F\u002F 'batch_abc123'\n    \u002F\u002F ...\n}\n\n$response->toArray(); \u002F\u002F ['object' => 'list', ...]]\n```\n\n### `Vector Stores` Resource\n\n#### `create`\n\nCreate a vector store.\n\n```php\n$response = $client->vectorStores()->create([\n    'file_ids' => [\n        'file-fUU0hFRuQ1GzhOweTNeJlCXG',\n    ],\n    'name' => 'My first Vector Store',\n]);\n\n$response->id; \u002F\u002F 'vs_vzfQhlTWVUl38QGqQAoQjeDF'\n$response->object; \u002F\u002F 'vector_store'\n$response->createdAt; \u002F\u002F 1717703267\n$response->name; \u002F\u002F 'My first Vector Store'\n$response->usageBytes; \u002F\u002F 0\n$response->fileCounts->inProgress; \u002F\u002F 1\n$response->fileCounts->completed; \u002F\u002F 0\n$response->fileCounts->failed; \u002F\u002F 0\n$response->fileCounts->cancelled; \u002F\u002F 0\n$response->fileCounts->total; \u002F\u002F 1\n$response->status; \u002F\u002F 'in_progress'\n$response->expiresAfter; \u002F\u002F null\n$response->expiresAt; \u002F\u002F null\n$response->lastActiveAt; \u002F\u002F 1717703267\n\n$response->toArray(); \u002F\u002F ['id' => 'vs_vzfQhlTWVUl38QGqQAoQjeDF', ...]\n```\n\n#### `retrieve`\n\nRetrieves a vector store.\n\n```php\n$response = $client->vectorStores()->retrieve(\n    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',\n);\n\n$response->id; \u002F\u002F 'vs_vzfQhlTWVUl38QGqQAoQjeDF'\n$response->object; \u002F\u002F 'vector_store'\n$response->createdAt; \u002F\u002F 1717703267\n$response->name; \u002F\u002F 'My first Vector Store'\n$response->usageBytes; \u002F\u002F 0\n$response->fileCounts->inProgress; \u002F\u002F 1\n$response->fileCounts->completed; \u002F\u002F 0\n$response->fileCounts->failed; \u002F\u002F 0\n$response->fileCounts->cancelled; \u002F\u002F 0\n$response->fileCounts->total; \u002F\u002F 1\n$response->status; \u002F\u002F 'in_progress'\n$response->expiresAfter; \u002F\u002F null\n$response->expiresAt; \u002F\u002F null\n$response->lastActiveAt; \u002F\u002F 1717703267\n\n$response->toArray(); \u002F\u002F ['id' => 'vs_vzfQhlTWVUl38QGqQAoQjeDF', ...]\n```\n\n#### `modify`\n\nModifies a vector store.\n\n```php\n$response = $client->vectorStores()->modify(\n    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',\n    parameters:  [\n        'name' => 'New name',\n    ],\n);\n\n$response->id; \u002F\u002F 'vs_vzfQhlTWVUl38QGqQAoQjeDF'\n$response->object; \u002F\u002F 'vector_store'\n$response->createdAt; \u002F\u002F 1717703267\n$response->name; \u002F\u002F 'New name'\n$response->usageBytes; \u002F\u002F 0\n$response->fileCounts->inProgress; \u002F\u002F 1\n$response->fileCounts->completed; \u002F\u002F 0\n$response->fileCounts->failed; \u002F\u002F 0\n$response->fileCounts->cancelled; \u002F\u002F 0\n$response->fileCounts->total; \u002F\u002F 1\n$response->status; \u002F\u002F 'in_progress'\n$response->expiresAfter; \u002F\u002F null\n$response->expiresAt; \u002F\u002F null\n$response->lastActiveAt; \u002F\u002F 1717703267\n\n$response->toArray(); \u002F\u002F ['id' => 'vs_vzfQhlTWVUl38QGqQAoQjeDF', ...]\n```\n\n#### `delete`\n\nDelete a vector store.\n\n```php\n$response = $client->vectorStores()->delete(\n    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',\n);\n\n$response->id; \u002F\u002F 'vs_vzfQhlTWVUl38QGqQAoQjeDF'\n$response->object; \u002F\u002F 'vector_store.deleted'\n$response->deleted; \u002F\u002F true\n\n$response->toArray(); \u002F\u002F ['id' => 'vs_vzfQhlTWVUl38QGqQAoQjeDF', ...]\n```\n\n#### `list`\n\nReturns a list of vector stores.\n\n```php\n$response = $client->vectorStores()->list(\n    parameters: [\n        'limit' => 10,\n    ],\n);\n\n$response->object; \u002F\u002F 'list'\n$response->firstId; \u002F\u002F 'vs_vzfQhlTWVUl38QGqQAoQjeDF'\n$response->lastId; \u002F\u002F 'vs_D5DPOgBxSoEBTmYBgUESdPpa'\n$response->hasMore; \u002F\u002F true\n\nforeach ($response->data as $result) {\n    $result->id; \u002F\u002F 'vs_vzfQhlTWVUl38QGqQAoQjeDF'\n    \u002F\u002F ...\n}\n\n$response->toArray(); \u002F\u002F ['object' => 'list', ...]]\n```\n\n### `Vector Store Files` Resource\n\n#### `create`\n\nCreate a vector store file by attaching a File to a vector store.\n\n```php\n$response = $client->vectorStores()->files()->create(\n    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',\n    parameters: [\n        'file_id' => 'file-fUU0hFRuQ1GzhOweTNeJlCXG',\n    ]\n);\n\n$response->id; \u002F\u002F 'file-fUU0hFRuQ1GzhOweTNeJlCXG'\n$response->object; \u002F\u002F 'vector_store.file'\n$response->usageBytes; \u002F\u002F 4553\n$response->createdAt; \u002F\u002F 1717703267\n$response->vectorStoreId; \u002F\u002F 'vs_vzfQhlTWVUl38QGqQAoQjeDF'\n$response->status; \u002F\u002F 'completed'\n$response->lastError; \u002F\u002F null\n$response->chunkingStrategy->type; \u002F\u002F 'static'\n$response->chunkingStrategy->maxChunkSizeTokens; \u002F\u002F 800\n$response->chunkingStrategy->chunkOverlapTokens; \u002F\u002F 400\n\n$response->toArray(); \u002F\u002F ['id' => 'file-fUU0hFRuQ1GzhOweTNeJlCXG', ...]\n```\n\n#### `retrieve`\n\nRetrieves a vector store file.\n\n```php\n$response = $client->vectorStores()->files()->retrieve(\n    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',\n    fileId: 'file-fUU0hFRuQ1GzhOweTNeJlCXG',\n);\n\n$response->id; \u002F\u002F 'file-fUU0hFRuQ1GzhOweTNeJlCXG'\n$response->object; \u002F\u002F 'vector_store.file'\n$response->usageBytes; \u002F\u002F 4553\n$response->createdAt; \u002F\u002F 1717703267\n$response->vectorStoreId; \u002F\u002F 'vs_vzfQhlTWVUl38QGqQAoQjeDF'\n$response->status; \u002F\u002F 'completed'\n$response->lastError; \u002F\u002F null\n$response->chunkingStrategy->type; \u002F\u002F 'static'\n$response->chunkingStrategy->maxChunkSizeTokens; \u002F\u002F 800\n$response->chunkingStrategy->chunkOverlapTokens; \u002F\u002F 400\n\n$response->toArray(); \u002F\u002F ['id' => 'file-fUU0hFRuQ1GzhOweTNeJlCXG', ...]\n```\n\n#### `delete`\n\nDelete a vector store file. This will remove the file from the vector store but the file itself will not be deleted. To delete the file, use the delete file endpoint.\n\n```php\n$response = $client->vectorStores()->files()->delete(\n    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',\n    fileId: 'file-fUU0hFRuQ1GzhOweTNeJlCXG',\n);\n\n$response->id; \u002F\u002F 'file-fUU0hFRuQ1GzhOweTNeJlCXG'\n$response->object; \u002F\u002F 'vector_store.file.deleted'\n$response->deleted; \u002F\u002F true\n\n$response->toArray(); \u002F\u002F ['id' => 'file-fUU0hFRuQ1GzhOweTNeJlCXG', ...]\n```\n\n#### `list`\n\nReturns a list of vector store files.\n\n```php\n$response = $client->vectorStores()->files()->list(\n    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',\n    parameters: [\n        'limit' => 10,\n    ],\n);\n\n$response->object; \u002F\u002F 'list'\n$response->firstId; \u002F\u002F 'file-fUU0hFRuQ1GzhOweTNeJlCXG'\n$response->lastId; \u002F\u002F 'file-D5DPOgBxSoEBTmYBgUESdPpa'\n$response->hasMore; \u002F\u002F true\n\nforeach ($response->data as $result) {\n    $result->id; \u002F\u002F 'file-fUU0hFRuQ1GzhOweTNeJlCXG'\n    \u002F\u002F ...\n}\n\n$response->toArray(); \u002F\u002F ['object' => 'list', ...]]\n```\n\n#### `search`\n\nSearch a vector store for relevant chunks based on a query and file attributes filter.\n\n```php\n$response = $client->vectorStores()->search(\n    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',\n    parameters: [\n        'query' => 'What is the return policy?',\n        'max_num_results' => 5,\n        'filters' => [],\n        'rewrite_query' => false\n    ]\n);\n\n$response->object; \u002F\u002F 'vector_store.search_results.page'\n$response->searchQuery; \u002F\u002F 'What is the return policy?'\n$response->hasMore; \u002F\u002F false\n$response->nextPage; \u002F\u002F null\nforeach ($response->data as $file) {\n    $result->fileId; \u002F\u002F 'file-fUU0hFRuQ1GzhOweTNeJlCXG'\n    $result->filename; \u002F\u002F 'return_policy.pdf'\n    $result->score; \u002F\u002F 0.95\n    $result->attributes; \u002F\u002F ['category' => 'customer_service']\n\n    foreach ($result->content as $content) {\n        $content->type; \u002F\u002F 'text'\n        $content->text; \u002F\u002F 'Our return policy allows customers to return items within 30 days...'\n    }\n}\n\n$response->toArray(); \u002F\u002F ['object' => 'vector_store.search_results.page', ...]\n```\n\n### `Vector Store File Batches` Resource\n\n#### `create`\n\nCreate a vector store file batch.\n\n```php\n$response = $client->vectorStores()->batches()->create(\n    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',\n    parameters: [\n        'file_ids' => [\n            'file-fUU0hFRuQ1GzhOweTNeJlCXG',\n        ],\n    ]\n);\n\n$response->id; \u002F\u002F 'vsfb_123'\n$response->object; \u002F\u002F 'vector_store.files_batch'\n$response->createdAt; \u002F\u002F 1698107661\n$response->vectorStoreId; \u002F\u002F 'vs_vzfQhlTWVUl38QGqQAoQjeDF'\n$response->status; \u002F\u002F 'completed'\n$response->fileCounts->inProgress; \u002F\u002F 1\n$response->fileCounts->completed; \u002F\u002F 0\n$response->fileCounts->failed; \u002F\u002F 0\n$response->fileCounts->cancelled; \u002F\u002F 0\n$response->fileCounts->total; \u002F\u002F 1\n\n$response->toArray(); \u002F\u002F ['id' => 'vsfb_123', ...]\n```\n\n#### `retrieve`\n\nRetrieves a vector store file batch.\n\n```php\n$response = $client->vectorStores()->batches()->retrieve(\n    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',\n    fileBatchId: 'vsfb_123',\n);\n\n$response->id; \u002F\u002F 'vsfb_123'\n$response->object; \u002F\u002F 'vector_store.files_batch'\n$response->createdAt; \u002F\u002F 1698107661\n$response->vectorStoreId; \u002F\u002F 'vs_vzfQhlTWVUl38QGqQAoQjeDF'\n$response->status; \u002F\u002F 'completed'\n$response->fileCounts->inProgress; \u002F\u002F 1\n$response->fileCounts->completed; \u002F\u002F 0\n$response->fileCounts->failed; \u002F\u002F 0\n$response->fileCounts->cancelled; \u002F\u002F 0\n$response->fileCounts->total; \u002F\u002F 1\n\n$response->toArray(); \u002F\u002F ['id' => 'vsfb_123', ...]\n```\n\n#### `cancel`\n\nCancel a vector store file batch. This attempts to cancel the processing of files in this batch as soon as possible.\n\n```php\n$response = $client->vectorStores()->batches()->cancel(\n    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',\n    fileBatchId: 'vsfb_123',\n);\n\n$response->id; \u002F\u002F 'vsfb_123'\n$response->object; \u002F\u002F 'vector_store.files_batch'\n$response->createdAt; \u002F\u002F 1698107661\n$response->vectorStoreId; \u002F\u002F 'vs_vzfQhlTWVUl38QGqQAoQjeDF'\n$response->status; \u002F\u002F 'cancelling'\n$response->fileCounts->inProgress; \u002F\u002F 1\n$response->fileCounts->completed; \u002F\u002F 0\n$response->fileCounts->failed; \u002F\u002F 0\n$response->fileCounts->cancelled; \u002F\u002F 0\n$response->fileCounts->total; \u002F\u002F 1\n\n$response->toArray(); \u002F\u002F ['id' => 'vsfb_123', ...]\n```\n\n#### `list`\n\nReturns a list of vector store files.\n\n```php\n$response = $client->vectorStores()->batches()->listFiles(\n    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',\n    fileBatchId: 'vsfb_123',\n    parameters: [\n        'limit' => 10,\n    ],\n);\n\n$response->object; \u002F\u002F 'list'\n$response->firstId; \u002F\u002F 'file-fUU0hFRuQ1GzhOweTNeJlCXG'\n$response->lastId; \u002F\u002F 'file-D5DPOgBxSoEBTmYBgUESdPpa'\n$response->hasMore; \u002F\u002F true\n\nforeach ($response->data as $result) {\n    $result->id; \u002F\u002F 'file-fUU0hFRuQ1GzhOweTNeJlCXG'\n    \u002F\u002F ...\n}\n\n$response->toArray(); \u002F\u002F ['object' => 'list', ...]]\n```\n\n### Realtime Ephemeral Keys\n\n#### `token`\n\nCreate an ephemeral API token for real time sessions.\n\n```php\n$response = $client->realtime()->token();\n\n$response->clientSecret->value \u002F\u002F 'ek-1234567890abcdefg'\n$response->clientSecret->expiresAt \u002F\u002F 1717703267\n```\n\n#### `transcribeToken`\n\nCreate an ephemeral API token for real time transcription sessions.\n\n```php\n$response = $client->realtime()->transcribeToken();\n\n$response->clientSecret->value \u002F\u002F 'et-1234567890abcdefg'\n$response->clientSecret->expiresAt \u002F\u002F 1717703267\n```\n\n### `Completions` Resource (legacy)\n\n> [!WARNING]  \n> The `Completions` resource was marked \"Legacy\" by OpenAI in July 2023. Please use the `Chat` resource instead.\n\n\u003Cdetails>\n\u003Csummary>Completion API Information\u003C\u002Fsummary>\n\n#### `create`\n\nCreates a completion for the provided prompt and parameters.\n\n```php\n$response = $client->completions()->create([\n    'model' => 'gpt-3.5-turbo-instruct',\n    'prompt' => 'Say this is a test',\n    'max_tokens' => 6,\n    'temperature' => 0\n]);\n\n$response->id; \u002F\u002F 'cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7'\n$response->object; \u002F\u002F 'text_completion'\n$response->created; \u002F\u002F 1589478378\n$response->model; \u002F\u002F 'gpt-3.5-turbo-instruct'\n\nforeach ($response->choices as $choice) {\n    $choice->text; \u002F\u002F '\\n\\nThis is a test'\n    $choice->index; \u002F\u002F 0\n    $choice->logprobs; \u002F\u002F null\n    $choice->finishReason; \u002F\u002F 'length' or null\n}\n\n$response->usage->promptTokens; \u002F\u002F 5,\n$response->usage->completionTokens; \u002F\u002F 6,\n$response->usage->totalTokens; \u002F\u002F 11\n\n$response->toArray(); \u002F\u002F ['id' => 'cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7', ...]\n```\n\n#### `create streamed`\n\nCreates a streamed completion for the provided prompt and parameters.\n\n```php\n$stream = $client->completions()->createStreamed([\n        'model' => 'gpt-3.5-turbo-instruct',\n        'prompt' => 'Hi',\n        'max_tokens' => 10,\n    ]);\n\nforeach($stream as $response){\n    $response->choices[0]->text;\n}\n\u002F\u002F 1. iteration => 'I'\n\u002F\u002F 2. iteration => ' am'\n\u002F\u002F 3. iteration => ' very'\n\u002F\u002F 4. iteration => ' excited'\n\u002F\u002F ...\n```\n\n\u003C\u002Fdetails>\n\n### `Assistants` Resource (deprecated)\n\n> [!WARNING]\n> OpenAI has deprecated the Assistants API and will stop working by August 26, 2026. https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fmigrate-to-responses#assistants-api\n\n\u003Cdetails>\n\u003Csummary>Assistants API Information\u003C\u002Fsummary>\n\n> **Note** - If you are creating the client manually from the factory. Make sure you provide the necessary header:\n> ```php\n> $factory->withHttpHeader('OpenAI-Beta', 'assistants=v2')\n> ```\n\n#### `create`\n\nCreate an assistant with a model and instructions.\n\n```php\n$response = $client->assistants()->create([\n    'instructions' => 'You are a personal math tutor. When asked a question, write and run Python code to answer the question.',\n    'name' => 'Math Tutor',\n    'tools' => [\n        [\n            'type' => 'code_interpreter',\n        ],\n    ],\n    'model' => 'gpt-4o',\n]);\n\n$response->id; \u002F\u002F 'asst_gxzBkD1wkKEloYqZ410pT5pd'\n$response->object; \u002F\u002F 'assistant'\n$response->createdAt; \u002F\u002F 1623936000\n$response->name; \u002F\u002F 'Math Tutor'\n$response->instructions; \u002F\u002F 'You are a personal math tutor. When asked a question, write and run Python code to answer the question.'\n$response->model; \u002F\u002F 'gpt-4o'\n$response->description; \u002F\u002F null\n$response->tools[0]->type; \u002F\u002F 'code_interpreter'\n$response->toolResources; \u002F\u002F []\n$response->metadata; \u002F\u002F []\n$response->temperature: \u002F\u002F null\n$response->topP: \u002F\u002F null\n$response->format: \u002F\u002F 'auto'\n\n$response->toArray(); \u002F\u002F ['id' => 'asst_gxzBkD1wkKEloYqZ410pT5pd', ...]\n```\n\n#### `retrieve`\n\nRetrieves an assistant.\n\n```php\n$response = $client->assistants()->retrieve('asst_gxzBkD1wkKEloYqZ410pT5pd');\n\n$response->id; \u002F\u002F 'asst_gxzBkD1wkKEloYqZ410pT5pd'\n$response->object; \u002F\u002F 'assistant'\n$response->createdAt; \u002F\u002F 1623936000\n$response->name; \u002F\u002F 'Math Tutor'\n$response->instructions; \u002F\u002F 'You are a personal math tutor. When asked a question, write and run Python code to answer the question.'\n$response->model; \u002F\u002F 'gpt-4o'\n$response->description; \u002F\u002F null\n$response->tools[0]->type; \u002F\u002F 'code_interpreter'\n$response->toolResources; \u002F\u002F []\n$response->metadata; \u002F\u002F []\n$response->temperature: \u002F\u002F null\n$response->topP: \u002F\u002F null\n$response->format: \u002F\u002F 'auto'\n\n$response->toArray(); \u002F\u002F ['id' => 'asst_gxzBkD1wkKEloYqZ410pT5pd', ...]\n```\n\n#### `modify`\n\nModifies an assistant.\n\n```php\n$response = $client->assistants()->modify('asst_gxzBkD1wkKEloYqZ410pT5pd', [\n        'name' => 'New Math Tutor',\n    ]);\n\n$response->id; \u002F\u002F 'asst_gxzBkD1wkKEloYqZ410pT5pd'\n$response->object; \u002F\u002F 'assistant'\n$response->createdAt; \u002F\u002F 1623936000\n$response->name; \u002F\u002F 'New Math Tutor'\n$response->instructions; \u002F\u002F 'You are a personal math tutor. When asked a question, write and run Python code to answer the question.'\n$response->model; \u002F\u002F 'gpt-4o'\n$response->description; \u002F\u002F null\n$response->tools[0]->type; \u002F\u002F 'code_interpreter'\n$response->toolResources; \u002F\u002F []\n$response->metadata; \u002F\u002F []\n$response->temperature: \u002F\u002F null\n$response->topP: \u002F\u002F null\n$response->format: \u002F\u002F 'auto'\n\n$response->toArray(); \u002F\u002F ['id' => 'asst_gxzBkD1wkKEloYqZ410pT5pd', ...]\n```\n\n#### `delete`\n\nDelete an assistant.\n\n```php\n$response = $client->assistants()->delete('asst_gxzBkD1wkKEloYqZ410pT5pd');\n\n$response->id; \u002F\u002F 'asst_gxzBkD1wkKEloYqZ410pT5pd'\n$response->object; \u002F\u002F 'assistant.deleted'\n$response->deleted; \u002F\u002F true\n\n$response->toArray(); \u002F\u002F ['id' => 'asst_gxzBkD1wkKEloYqZ410pT5pd', ...]\n```\n\n#### `list`\n\nReturns a list of assistants.\n\n```php\n$response = $client->assistants()->list([\n    'limit' => 10,\n]);\n\n$response->object; \u002F\u002F 'list'\n$response->firstId; \u002F\u002F 'asst_gxzBkD1wkKEloYqZ410pT5pd'\n$response->lastId; \u002F\u002F 'asst_reHHtAM0jKLDIxanM6gP6DaR'\n$response->hasMore; \u002F\u002F true\n\nforeach ($response->data as $result) {\n    $result->id; \u002F\u002F 'asst_gxzBkD1wkKEloYqZ410pT5pd'\n    \u002F\u002F ...\n}\n\n$response->toArray(); \u002F\u002F ['object' => 'list', ...]]\n```\n\n\u003C\u002Fdetails>\n\n### `Threads` Resource (deprecated)\n\n> [!WARNING]\n> OpenAI has deprecated the Assistants API and will stop working by August 26, 2026. https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fmigrate-to-responses#assistants-api\n\n\u003Cdetails>\n\u003Csummary>Threads API Information\u003C\u002Fsummary>\n\n#### `create`\n\nCreate a thread.\n\n```php\n$response = $client->threads()->create([]);\n\n$response->id; \u002F\u002F 'thread_tKFLqzRN9n7MnyKKvc1Q7868'\n$response->object; \u002F\u002F 'thread'\n$response->createdAt; \u002F\u002F 1623936000\n$response->toolResources; \u002F\u002F null\n$response->metadata; \u002F\u002F []\n\n$response->toArray(); \u002F\u002F ['id' => 'thread_tKFLqzRN9n7MnyKKvc1Q7868', ...]\n```\n\n#### `createAndRun`\n\nCreate a thread and run it in one request.\n\n```php\n$response = $client->threads()->createAndRun(\n    [\n        'assistant_id' => 'asst_gxzBkD1wkKEloYqZ410pT5pd',\n        'thread' => [\n            'messages' =>\n                [\n                    [\n                        'role' => 'user',\n                        'content' => 'Explain deep learning to a 5 year old.',\n                    ],\n                ],\n        ],\n    ],\n);\n\n$response->id; \u002F\u002F 'run_4RCYyYzX9m41WQicoJtUQAb8'\n$response->object; \u002F\u002F 'thread.run'\n$response->createdAt; \u002F\u002F 1623936000\n$response->assistantId; \u002F\u002F 'asst_gxzBkD1wkKEloYqZ410pT5pd'\n$response->threadId; \u002F\u002F 'thread_tKFLqzRN9n7MnyKKvc1Q7868'\n$response->status; \u002F\u002F 'queued'\n$response->requiredAction; \u002F\u002F null\n$response->lastError; \u002F\u002F null\n$response->startedAt; \u002F\u002F null\n$response->expiresAt; \u002F\u002F 1699622335\n$response->cancelledAt; \u002F\u002F null\n$response->failedAt; \u002F\u002F null\n$response->completedAt; \u002F\u002F null\n$response->incompleteDetails; \u002F\u002F null\n$response->lastError; \u002F\u002F null\n$response->model; \u002F\u002F 'gpt-4o'\n$response->instructions; \u002F\u002F null\n$response->tools; \u002F\u002F []\n$response->metadata; \u002F\u002F []\n$response->usage->total_tokens; \u002F\u002F 579\n$response->temperature; \u002F\u002F null\n$response->topP; \u002F\u002F null\n$response->maxPromptTokens; \u002F\u002F 1000\n$response->maxCompletionTokens; \u002F\u002F 1000\n$response->truncationStrategy->type; \u002F\u002F 'auto'\n$response->responseFormat; \u002F\u002F 'auto'\n$response->toolChoice; \u002F\u002F 'auto'\n\n$response->toArray(); \u002F\u002F ['id' => 'run_4RCYyYzX9m41WQicoJtUQAb8', ...]\n```\n\n#### `retrieve`\n\nRetrieves a thread.\n\n```php\n$response = $client->threads()->retrieve('thread_tKFLqzRN9n7MnyKKvc1Q7868');\n\n$response->id; \u002F\u002F 'thread_tKFLqzRN9n7MnyKKvc1Q7868'\n$response->object; \u002F\u002F 'thread'\n$response->createdAt; \u002F\u002F 1623936000\n$response->toolResources; \u002F\u002F null\n$response->metadata; \u002F\u002F []\n\n$response->toArray(); \u002F\u002F ['id' => 'thread_tKFLqzRN9n7MnyKKvc1Q7868', ...]\n```\n\n#### `modify`\n\nModifies a thread.\n\n```php\n$response = $client->threads()->modify('thread_tKFLqzRN9n7MnyKKvc1Q7868', [\n        'metadata' => [\n            'name' => 'My new thread name',\n        ],\n    ]);\n\n$response->id; \u002F\u002F 'thread_tKFLqzRN9n7MnyKKvc1Q7868'\n$response->object; \u002F\u002F 'thread'\n$response->createdAt; \u002F\u002F 1623936000\n$response->toolResources; \u002F\u002F null\n$response->metadata; \u002F\u002F ['name' => 'My new thread name']\n\n$response->toArray(); \u002F\u002F ['id' => 'thread_tKFLqzRN9n7MnyKKvc1Q7868', ...]\n```\n\n#### `delete`\n\nDelete a thread.\n\n```php\n$response = $client->threads()->delete('thread_tKFLqzRN9n7MnyKKvc1Q7868');\n\n$response->id; \u002F\u002F 'thread_tKFLqzRN9n7MnyKKvc1Q7868'\n$response->object; \u002F\u002F 'thread.deleted'\n$response->deleted; \u002F\u002F true\n\n$response->toArray(); \u002F\u002F ['id' => 'thread_tKFLqzRN9n7MnyKKvc1Q7868', ...]\n```\n\n\u003C\u002Fdetails>\n\n### `Thread Messages` Resource (deprecated)\n\n> [!WARNING]\n> OpenAI has deprecated the Assistants API and will stop working by August 26, 2026. https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fmigrate-to-responses#assistants-api\n\n\u003Cdetails>\n\u003Csummary>Thread Messages API Information\u003C\u002Fsummary>\n\n#### `create`\n\nCreate a message.\n\n```php\n$response = $client->threads()->messages()->create('thread_tKFLqzRN9n7MnyKKvc1Q7868', [\n    'role' => 'user',\n    'content' => 'What is the sum of 5 and 7?',\n]);\n\n$response->id; \u002F\u002F 'msg_SKYwvF3zcigxthfn6F4hnpdU'\n$response->object; \u002F\u002F 'thread.message'\n$response->createdAt; \u002F\u002F 1623936000\n$response->threadId; \u002F\u002F 'thread_tKFLqzRN9n7MnyKKvc1Q7868'\n$response->status; \u002F\u002F 'in_progress\n$response->incompleteDetails; \u002F\u002F null\n$response->completedAt; \u002F\u002F null\n$response->incompleteAt; \u002F\u002F null\n$response->role; \u002F\u002F 'user'\n$response->content[0]->type; \u002F\u002F 'text'\n$response->content[0]->text->value; \u002F\u002F 'What is the sum of 5 and 7?'\n$response->content[0]->text->annotations; \u002F\u002F []\n$response->assistantId; \u002F\u002F null\n$response->runId; \u002F\u002F null\n$response->attachments; \u002F\u002F []\n$response->metadata; \u002F\u002F []\n\n$response->toArray(); \u002F\u002F ['id' => 'msg_SKYwvF3zcigxthfn6F4hnpdU', ...]\n```\n\n#### `retrieve`\n\nRetrieve a message.\n\n```php\n$response = $client->threads()->messages()->retrieve(\n    threadId: 'thread_tKFLqzRN9n7MnyKKvc1Q7868',\n    messageId: 'msg_SKYwvF3zcigxthfn6F4hnpdU',\n);\n\n$response->id; \u002F\u002F 'msg_SKYwvF3zcigxthfn6F4hnpdU'\n$response->object; \u002F\u002F 'thread.message'\n$response->createdAt; \u002F\u002F 1623936000\n$response->threadId; \u002F\u002F 'thread_tKFLqzRN9n7MnyKKvc1Q7868'\n$response->status; \u002F\u002F 'in_progress\n$response->incompleteDetails; \u002F\u002F null\n$response->completedAt; \u002F\u002F null\n$response->incompleteAt; \u002F\u002F null\n$response->role; \u002F\u002F 'user'\n$response->content[0]->type; \u002F\u002F 'text'\n$response->content[0]->text->value; \u002F\u002F 'What is the sum of 5 and 7?'\n$response->content[0]->text->annotations; \u002F\u002F []\n$response->assistantId; \u002F\u002F null\n$response->runId; \u002F\u002F null\n$response->attachments; \u002F\u002F []\n$response->metadata; \u002F\u002F []\n\n$response->toArray(); \u002F\u002F ['id' => 'msg_SKYwvF3zcigxthfn6F4hnpdU', ...]\n```\n\n#### `modify`\n\nModifies a message.\n\n```php\n$response = $client->threads()->messages()->modify(\n    threadId: 'thread_tKFLqzRN9n7MnyKKvc1Q7868',\n    messageId: 'msg_SKYwvF3zcigxthfn6F4hnpdU',\n    parameters:  [\n        'metadata' => [\n            'name' => 'My new message name',\n        ],\n    ],\n);\n\n$response->id; \u002F\u002F 'msg_SKYwvF3zcigxthfn6F4hnpdU'\n$response->object; \u002F\u002F 'thread.message'\n$response->createdAt; \u002F\u002F 1623936000\n$response->threadId; \u002F\u002F 'thread_tKFLqzRN9n7MnyKKvc1Q7868'\n$response->status; \u002F\u002F 'in_progress\n$response->incompleteDetails; \u002F\u002F null\n$response->completedAt; \u002F\u002F null\n$response->incompleteAt; \u002F\u002F null\n$response->role; \u002F\u002F 'user'\n$response->content[0]->type; \u002F\u002F 'text'\n$response->content[0]->text->value; \u002F\u002F 'What is the sum of 5 and 7?'\n$response->content[0]->text->annotations; \u002F\u002F []\n$response->assistantId; \u002F\u002F null\n$response->runId; \u002F\u002F null\n$response->attachments; \u002F\u002F []\n$response->metadata; \u002F\u002F ['name' => 'My new message name']\n\n$response->toArray(); \u002F\u002F ['id' => 'msg_SKYwvF3zcigxthfn6F4hnpdU', ...]\n```\n\n#### `delete`\n\nDeletes a message.\n\n```php\n$response = $client->threads()->messages()->delete(\n    threadId: 'thread_tKFLqzRN9n7MnyKKvc1Q7868',\n    messageId: 'msg_SKYwvF3zcigxthfn6F4hnpdU'\n);\n\n$response->id; \u002F\u002F 'msg_SKYwvF3zcigxthfn6F4hnpdU'\n$response->object; \u002F\u002F 'thread.message.deleted'\n$response->deleted; \u002F\u002F true\n\n$response->toArray(); \u002F\u002F ['id' => 'msg_SKYwvF3zcigxthfn6F4hnpdU', ...]\n```\n\n#### `list`\n\nReturns a list of messages for a given thread.\n\n```php\n$response = $client->threads()->messages()->list('thread_tKFLqzRN9n7MnyKKvc1Q7868', [\n    'limit' => 10,\n]);\n\n$response->object; \u002F\u002F 'list'\n$response->firstId; \u002F\u002F 'msg_SKYwvF3zcigxthfn6F4hnpdU'\n$response->lastId; \u002F\u002F 'msg_SKYwvF3zcigxthfn6F4hnpdU'\n$response->hasMore; \u002F\u002F false\n\nforeach ($response->data as $result) {\n    $result->id; \u002F\u002F 'msg_SKYwvF3zcigxthfn6F4hnpdU'\n    \u002F\u002F ...\n}\n\n$response->toArray(); \u002F\u002F ['object' => 'list', ...]]\n```\n\n\u003C\u002Fdetails>\n\n### `Thread Runs` Resource (deprecated)\n\n> [!WARNING]\n> OpenAI has deprecated the Assistants API and will stop working by August 26, 2026. https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Fmigrate-to-responses#assistants-api\n\n\u003Cdetails>\n\u003Csummary>Thread Runs API Information\u003C\u002Fsummary>\n\n#### `create`\n\nCreate a run.\n\n```php\n$response = $client->threads()->runs()->create(\n    threadId: 'thread_tKFLqzRN9n7MnyKKvc1Q7868', \n    parameters: [\n        'assistant_id' => 'asst_gxzBkD1wkKEloYqZ410pT5pd',\n    ],\n);\n\n$response->id; \u002F\u002F 'run_4","OpenAI PHP 是一个社区维护的PHP API客户端，用于与OpenAI API进行交互。该项目支持多种功能，包括但不限于模型管理、对话处理、音频转文字、文本嵌入等，几乎涵盖了OpenAI提供的所有服务接口。它采用现代PHP编码标准，易于集成到现有的PHP项目中。适用于需要利用OpenAI强大语言处理能力的各种场景，如聊天机器人开发、内容生成、语音识别应用等。MIT许可证下发布，确保了广泛的适用性和灵活性。","2026-06-11 03:17:22","top_language"]