MIT License

项目介绍

openai-php/client 是一个托管在 GitHub 上的开源项目,主要使用 PHP 编写,采用 MIT License 许可证,目前获得 5.8k 个 Star、681 次 Fork。

仓库全名
openai-php/client
开源许可证
MIT License
Star 数
5.8k
Fork 数
681
未关闭 Issue
24

README 摘要

OpenAI PHP is a community-maintained PHP API client that allows you to interact with the Open AI API. Follow the creator Nuno Maduro: YouTube: youtube.com/@nunomaduro — Videos every weekday Twitch: twitch.tv/enunomaduro — Streams (almost) every weekday Twitter / X: x.com/enunomaduro LinkedIn: linkedin.com/in/nunomaduro Instagram: instagram.com/enunomaduro Tiktok: tiktok.com/@enunomaduro If you or your business…

完整内容见 GitHub 原始 README 或本页 。

常见问题

client 用什么语言开发?

主要使用 PHP 编写,采用 MIT License 许可证,目前有 5.8k 个 Star。

client 可以免费商用吗?

仓库采用 MIT License 许可证,可免费使用与修改,商业使用请遵守许可证条款(例如保留版权声明与许可声明)。

如何获取 client 的源码?

可以直接克隆仓库:git clone https://github.com/openai-php/client.git;安装与运行步骤见仓库 README。

client 最近还在维护吗?

仓库最近一次更新为 3 天前,当前有 24 个未关闭 Issue;Star 数为 5.8k,可作为社区活跃度的参考。

关于

GitHub 原始描述(英文)

⚡️ OpenAI PHP is a supercharged community-maintained PHP API client that allows you to interact with OpenAI API.

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

简要分析

热度分
7279
价值分
3712
活跃状态
活跃

语言占比

PHP

Release

README

OpenAI PHP

GitHub Workflow Status (main) Total Downloads Latest Version License


OpenAI PHP is a community-maintained PHP API client that allows you to interact with the Open AI API.

If 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:

Table of Contents

Get Started

Requires PHP 8.2+

First, install OpenAI via the Composer package manager:

composer require openai-php/client

Ensure that the php-http/discovery composer plugin is allowed to run or install a client manually if your project does not already have a PSR-18 client integrated.

composer require guzzlehttp/guzzle

Then, interact with OpenAI’s API:

$yourApiKey = getenv('YOUR_API_KEY');
$client = OpenAI::client($yourApiKey);

$response = $client->responses()->create([
    'model' => 'gpt-4o',
    'input' => 'Hello!',
]);

echo $response->outputText; // Hello! How can I assist you today?

If necessary, it is possible to configure and create a separate client.

$yourApiKey = getenv('YOUR_API_KEY');

$client = OpenAI::factory()
    ->withApiKey($yourApiKey)
    ->withOrganization('your-organization') // default: null
    ->withProject('Your Project') // default: null
    ->withBaseUri('openai.example.com/v1') // default: api.openai.com/v1
    ->withHttpClient($httpClient = new \GuzzleHttp\Client([])) // default: HTTP client found using PSR-18 HTTP Client Discovery
    ->withHttpHeader('X-My-Header', 'foo')
    ->withQueryParam('my-param', 'bar')
    ->withStreamHandler(fn (RequestInterface $request): ResponseInterface => $httpClient->send($request, [
        'stream' => true // Allows to provide a custom stream handler for the http client.
    ]))
    ->make();

Usage

Models Resource

list

Lists the currently available models, and provides basic information about each one such as the owner and availability.

$response = $client->models()->list();

$response->object; // 'list'

foreach ($response->data as $result) {
    $result->id; // 'gpt-3.5-turbo-instruct'
    $result->object; // 'model'
    // ...
}

$response->toArray(); // ['object' => 'list', 'data' => [...]]
retrieve

Retrieves a model instance, providing basic information about the model such as the owner and permissioning.

$response = $client->models()->retrieve('gpt-3.5-turbo-instruct');

$response->id; // 'gpt-3.5-turbo-instruct'
$response->object; // 'model'
$response->created; // 1642018370
$response->ownedBy; // 'openai'

$response->toArray(); // ['id' => 'gpt-3.5-turbo-instruct', ...]
delete

Delete a fine-tuned model.

$response = $client->models()->delete('curie:ft-acmeco-2021-03-03-21-44-20');

$response->id; // 'curie:ft-acmeco-2021-03-03-21-44-20'
$response->object; // 'model'
$response->deleted; // true

$response->toArray(); // ['id' => 'curie:ft-acmeco-2021-03-03-21-44-20', ...]

Responses Resource

create

Creates 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.

$response = $client->responses()->create([
    'model' => 'gpt-4o-mini',
    'tools' => [
        [
            'type' => 'web_search_preview'
        ]
    ],
    'input' => "what was a positive news story from today?",
    'temperature' => 0.7,
    'max_output_tokens' => 150,
    'tool_choice' => 'auto',
    'parallel_tool_calls' => true,
    'store' => true,
    'metadata' => [
        'user_id' => '123',
        'session_id' => 'abc456'
    ]
]);

$response->id; // 'resp_67ccd2bed1ec8190b14f964abc054267'
$response->object; // 'response'
$response->createdAt; // 1741476542
$response->status; // 'completed'
$response->model; // 'gpt-4o-mini'
$response->outputText; // 'The combined response text of any `output_text` content.'

foreach ($response->output as $output) {
    $output->type; // 'message'
    $output->id; // 'msg_67ccd2bf17f0819081ff3bb2cf6508e6'
    $output->status; // 'completed'
    $output->role; // 'assistant'
    
    foreach ($output->content as $content) {
        $content->type; // 'output_text'
        $content->text; // The response text
        $content->annotations; // Any annotations in the response
    }
}

$response->usage->inputTokens; // 36
$response->usage->outputTokens; // 87
$response->usage->totalTokens; // 123

$response->toArray(); // ['id' => 'resp_67ccd2bed1ec8190b14f964abc054267', ...]

Create a model response with a function tool.

$response = $client->responses()->create([
    'model' => 'gpt-4o-mini',
    'tools' => [
        [
            'type' => 'function',
            'name' => 'get_temperature',
            'description' => 'Get the current temperature in a given location',
            'parameters' => [
                'type' => 'object',
                'properties' => [
                    'location' => [
                        'type' => 'string',
                        'description' => 'The city and state, e.g. San Francisco, CA',
                    ],
                    'unit' => [
                        'type' => 'string',
                        'enum' => ['celsius', 'fahrenheit'],
                    ],
                ],
                'required' => ['location'],
            ],
        ]
    ],
    'input' => "What is the temperature in Rio Grande do Norte, Brazil?",
]);

foreach ($response->output as $item) {
    if ($item->type === 'function_call') {
        $name = $item->name ?? null;
        $args = json_decode($item->arguments ?? '{}', true) ?: [];

        if ($name === 'get_temperature') {
            // ✅ Call your custom function here with the extracted arguments
            // Example:
            // $temperature = get_temperature($args['location'], $args['unit'] ?? 'celsius');
            // Then, send the result back to the model if needed.
        }
    }
}

Create a response with hosted shell and an uploaded skill. See Shell and Skills for the execution environments and attachment formats.

$response = $client->responses()->create([
    'model' => 'gpt-5.4',
    'tools' => [
        [
            'type' => 'shell',
            'environment' => [
                'type' => 'container_auto',
                'skills' => [
                    ['type' => 'skill_reference', 'skill_id' => 'skill_abc123'],
                ],
            ],
        ],
    ],
    'input' => 'Use the uploaded skill to count these words: one two three.',
]);

foreach ($response->output as $item) {
    if ($item->type === 'shell_call') {
        $item->action->commands; // Shell commands requested by the model
        $item->action->timeoutMs; // Optional execution timeout
        $item->environment; // Local environment or container reference
    }

    if ($item->type === 'shell_call_output') {
        foreach ($item->output as $output) {
            $output->stdout;
            $output->stderr;
            $output->outcome->type; // 'exit' or 'timeout'

            if ($output->outcome->type === 'exit') {
                $output->outcome->exitCode;
            }
        }
    }
}

$response->toArray();

Hosted shell runs on OpenAI. An automatically provisioned container can appear as container_reference in the response. Attachments may also use inline with a base64 ZIP source. With environment.type = local, your application executes the commands and supplies shell_call_output items; the client only parses and serializes these data structures.

create streamed

When 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.

$stream = $client->responses()->createStreamed([
    'model' => 'gpt-4o-mini',
    'tools' => [
        [
            'type' => 'web_search_preview'
        ]
    ],
    'input' => "what was a positive news story from today?",
]);

foreach ($stream as $response) {
    $response->event; // 'response.created'
}
retrieve

Retrieves a model response with the given ID.

$response = $client->responses()->retrieve('resp_67ccd2bed1ec8190b14f964abc054267');

$response->id; // 'resp_67ccd2bed1ec8190b14f964abc054267'
$response->object; // 'response'
$response->createdAt; // 1741476542
$response->status; // 'completed'
$response->error; // null
$response->incompleteDetails; // null
$response->instructions; // null
$response->maxOutputTokens; // null
$response->model; // 'gpt-4o-mini-2024-07-18"'
$response->parallelToolCalls; // true
$response->previousResponseId; // null
$response->store; // true
$response->temperature; // 1.0
$response->toolChoice; // 'auto'
$response->topP; // 1.0
$response->truncation; // 'disabled'

$response->toArray(); // ['id' => 'resp_67ccd2bed1ec8190b14f964abc054267', ...]
retrieve streamed

When 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.

$stream = $client->responses()->retrieveStreamed('resp_67ccd2bed1ec8190b14f964abc054267', [
    'starting_after' => '2',
]);

foreach ($stream as $response) {
    $response->event; // 'response.created'
}
cancel

Cancel a model response (background request) with the given ID.

$response = $client->responses()->cancel('resp_67ccd2bed1ec8190b14f964abc054267');

$response->id; // 'resp_67ccd2bed1ec8190b14f964abc054267'
$response->status; // 'canceled'

$response->toArray(); // ['id' => 'resp_67ccd2bed1ec8190b14f964abc054267', 'status' => 'canceled', ...]
delete

Deletes a model response with the given ID.

$response = $client->responses()->delete('resp_67ccd2bed1ec8190b14f964abc054267');

$response->id; // 'resp_67ccd2bed1ec8190b14f964abc054267'
$response->object; // 'response'
$response->deleted; // true

$response->toArray(); // ['id' => 'resp_67ccd2bed1ec8190b14f964abc054267', 'deleted' => true, ...]
list

Lists input items for a response with the given ID. All events and their payloads can be found in OpenAI docs.

$response = $client->responses()->list('resp_67ccd2bed1ec8190b14f964abc054267', [
    'limit' => 10,
    'order' => 'desc'
]);

$response->object; // 'list'

foreach ($response->data as $item) {
    $item->type; // 'message'
    $item->id; // 'msg_680bf4e8c1948192b64abf0bad54b30806e0834f49400fc3'
    $item->status; // 'completed'
    $item->role; // 'user'
}

$response->firstId; // 'msg_680bf4e8c1948192b64abf0bad54b30806e0834f49400fc3'
$response->lastId; // 'msg_680bf4e8c1948192b64abf0bad54b30806e0834f49400fc3'
$response->hasMore; // false

$response->toArray(); // ['object' => 'list', 'data' => [...], ...]

Conversations Resource

create

Create a conversation.

$response = $client->conversations()->create([
    'metadata' => ['topic' => 'demo'],
    'items' => [
        [
            'type' => 'message',
            'role' => 'user',
            'content' => 'Hello!'
        ],
    ],
]);

$response->id; // 'conv_123'
$response->object; // 'conversation'
$response->createdAt; // 1741900000
$response->metadata; // ['topic' => 'demo']

$response->toArray(); // ['id' => 'conv_123', 'object' => 'conversation', ...]
retrieve

Retrieve a conversation by ID.

$response = $client->conversations()->retrieve('conv_123');

$response->id; // 'conv_123'
$response->object; // 'conversation'
$response->createdAt; // 1741900000

$response->toArray(); // ['id' => 'conv_123', 'object' => 'conversation', ...]
update

Update a conversation by ID.

$response = $client->conversations()->update('conv_123', [
    'metadata' => ['foo' => 'bar'],
]);

$response->id; // 'conv_123'
$response->metadata; // ['foo' => 'bar']
delete

Delete a conversation by ID.

$response = $client->conversations()->delete('conv_123');

$response->id; // 'conv_123'
$response->object; // 'conversation.deleted'
$response->deleted; // true

$response->toArray(); // ['id' => 'conv_123', 'object' => 'conversation.deleted', 'deleted' => true]

Conversations Items Resource

create

Create items for a conversation.

$response = $client->conversations()->items()->create('conv_123', [
    'items' => [
        [
            'role' => 'system',
            'content' => 'Refer to me as PHPBot.',
        ],
    ],
]);

foreach ($response->data as $listItem) {
    $listItem->item; // The created item (e.g., message)
}

$response->firstId; // 'msg_abc'
$response->lastId; // 'msg_abc'
$response->hasMore; // false

$response->toArray(); // ['object' => 'list', 'data' => [...], ...]
list

List items for a conversation.

$response = $client->conversations()->items()->list('conv_123', [
    'limit' => 10,
]);

$response->object; // 'list'
retrieve

Retrieve a specific item from a conversation.

$response = $client->conversations()->items()->retrieve('conv_123', 'msg_abc', [
    'include' => ['step_details'],
]);

$response->id; // 'msg_abc'
$response->type; // 'message'
$response->status; // 'completed'
delete

Delete a specific item from a conversation. Returns the updated conversation.

$response = $client->conversations()->items()->delete('conv_123', 'msg_abc');

$response->id; // 'conv_123'
$response->object; // 'conversation'

Containers Resource

create

Creates a container for use with the Code Interpreter tool.

$response = $client->containers()->create([
    'name' => 'My Container',
    'expires_after' => [
        'anchor' => 'last_active_at',
        'minutes' => 60,
    ],
]);

$response->id; // 'container_abc123'
$response->object; // 'container'
$response->createdAt; // 1690000000
$response->status; // 'active'
$response->expiresAfter->anchor; // 'last_active_at'
$response->expiresAfter->minutes; // 60
$response->lastActiveAt; // 1690001000
$response->name; // 'My Container'

$response->toArray(); // ['id' => 'container_abc123', 'object' => 'container', ...]
list

Returns a list of containers.

$response = $client->containers()->list([
    'limit' => 10,
    'order' => 'desc',
]);

$response->object; // 'list'

foreach ($response->data as $container) {
    $container->id; // 'container_abc123'
    $container->object; // 'container'
    $container->createdAt; // 1690000000
    $container->status; // 'active'
    $container->expiresAfter->anchor; // 'last_active_at'
    $container->expiresAfter->minutes; // 60
    $container->lastActiveAt; // 1690001000
    $container->name; // 'Test Container'
}

$response->firstId; // 'container_abc123'
$response->lastId; // 'container_def456'
$response->hasMore; // false

$response->toArray(); // ['object' => 'list', 'data' => [...], ...]
retrieve

Retrieves a container with the given ID.

$response = $client->containers()->retrieve('container_abc123');

$response->id; // 'container_abc123'
$response->object; // 'container'
$response->createdAt; // 1690000000
$response->status; // 'active'
$response->expiresAfter->anchor; // 'last_active_at'
$response->expiresAfter->minutes; // 60
$response->lastActiveAt; // 1690001000
$response->name; // 'Test Container'

$response->toArray(); // ['id' => 'container_abc123', 'object' => 'container', ...]
delete

Delete a container with the given ID.

$response = $client->containers()->delete('container_abc123');

$response->id; // 'container_abc123'
$response->object; // 'container'
$response->deleted; // true

$response->toArray(); // ['id' => 'container_abc123', 'object' => 'container', 'deleted' => true]

Containers Files Resource

create

Create or upload a file into a container.

$response = $client->containers()->files()->create('container_abc123', [
    'file' => fopen('path/to/local-file.txt', 'r'),
]);
$response = $client->containers()->files()->create('container_abc123', [
    'file_id' => 'file_XjGxS3KTG0uNmNOK362iJua3',
]);

$response->id; // 'cfile_682e0e8a43c88191a7978f477a09bdf5'
$response->object; // 'container.file'
$response->createdAt; // 1747848842
$response->bytes; // 880
$response->containerId; // 'container_abc123'
$response->path; // '/mnt/data/local-file.txt'
$response->source; // 'user'

$response->toArray(); // ['id' => 'cfile_...', 'object' => 'container.file', ...]
Note 注意

You must provide either file or file_id, but not both.

list

Returns a list of files in the container.

$response = $client->containers()->files()->list('container_abc123', [
    'limit' => 10,
    'order' => 'desc',
]);

$response->object; // 'list'

foreach ($response->data as $file) {
    $file->id; // 'cfile_682e0e8a43c88191a7978f477a09bdf5'
    $file->object; // 'container.file'
    $file->createdAt; // 1747848842
    $file->bytes; // 880
    $file->containerId; // 'container_abc123'
    $file->path; // '/mnt/data/...' 
    $file->source; // 'user'
}

$response->firstId; // 'cfile_...'
$response->lastId; // 'cfile_...'
$response->hasMore; // false

$response->toArray(); // ['object' => 'list', 'data' => [...], ...]
retrieve

Retrieve information about a container file.

$response = $client->containers()->files()->retrieve('container_abc123', 'cfile_682e0e8a43c88191a7978f477a09bdf5');

$response->id; // 'cfile_682e0e8a43c88191a7978f477a09bdf5'
$response->object; // 'container.file'
$response->createdAt; // 1747848842
$response->bytes; // 880
$response->containerId; // 'container_abc123'
$response->path; // '/mnt/data/...'
$response->source; // 'user'

$response->toArray(); // ['id' => 'cfile_...', 'object' => 'container.file', ...]
retrieve content

Returns the raw content of the specified container file.

$content = $client->containers()->files()->content('container_abc123', 'cfile_682e0e8a43c88191a7978f477a09bdf5');
// $content => string
delete

Delete a container file.

$response = $client->containers()->files()->delete('container_abc123', 'cfile_682e0e8a43c88191a7978f477a09bdf5');

$response->id; // 'cfile_682e0e8a43c88191a7978f477a09bdf5'
$response->object; // 'container.file.deleted'
$response->deleted; // true

$response->toArray(); // ['id' => 'cfile_...', 'object' => 'container.file.deleted', 'deleted' => true]

Skills Resource

Skills give an agent reusable instructions and supporting files. Upload a skill either as a zip bundle or as a directory of files, then reference it from the Responses API shell tool via skill_reference.

create

Creates a skill from a zip bundle, or from several files that share a single top-level folder.

// Zip upload
$response = $client->skills()->create([
    'files' => fopen('basic_math.zip', 'r'),
]);

// Directory upload
$response = $client->skills()->create([
    'files' => [
        fopen('basic_math/SKILL.md', 'r'),
        fopen('basic_math/calculate.py', 'r'),
    ],
]);

$response->id; // 'skill_abc123'
$response->name; // 'basic-math'
$response->defaultVersion; // '1'
$response->latestVersion; // '1'

$response->toArray(); // ['id' => 'skill_abc123', ...]
list

Lists the skills in the current project.

$response = $client->skills()->list([
    'limit' => 10,
]);

$response->object; // 'list'
$response->hasMore; // false

foreach ($response->data as $result) {
    $result->id; // 'skill_abc123'
    $result->name; // 'basic-math'
}

$response->toArray(); // ['object' => 'list', 'data' => [...], ...]
retrieve

Retrieves a skill by its ID.

$response = $client->skills()->retrieve('skill_abc123');

$response->id; // 'skill_abc123'
$response->description; // 'Add or multiply numbers.'

$response->toArray(); // ['id' => 'skill_abc123', ...]
update

Updates the default version pointer for a skill.

$response = $client->skills()->update('skill_abc123', [
    'default_version' => '2',
]);

$response->defaultVersion; // '2'
content

Downloads the zip bundle for a skill’s default version.

$zip = $client->skills()->content('skill_abc123');

file_put_contents('basic_math.zip', $zip);
delete

Deletes a skill and all of its versions.

$response = $client->skills()->delete('skill_abc123');

$response->id; // 'skill_abc123'
$response->object; // 'skill.deleted'
$response->deleted; // true

$response->toArray(); // ['id' => 'skill_abc123', ...]

Skills Versions Resource

create

Creates a new immutable version of a skill. Pass default to make it the default version.

$response = $client->skills()->versions()->create('skill_abc123', [
    'files' => fopen('basic_math_v2.zip', 'r'),
    'default' => 'true',
]);

$response->id; // 'skillver_abc123'
$response->version; // '2'

$response->toArray(); // ['id' => 'skillver_abc123', ...]
list

Lists the versions of a skill.

$response = $client->skills()->versions()->list('skill_abc123', [
    'order' => 'desc',
]);

foreach ($response->data as $result) {
    $result->version; // '2'
}
retrieve

Retrieves a specific version of a skill.

$response = $client->skills()->versions()->retrieve('skill_abc123', '2');

$response->skillId; // 'skill_abc123'
$response->version; // '2'
content

Downloads the zip bundle for a specific skill version.

$zip = $client->skills()->versions()->content('skill_abc123', '2');
delete

Deletes a skill version. The default version cannot be deleted; set another default first.

$response = $client->skills()->versions()->delete('skill_abc123', '1');

$response->object; // 'skill.version.deleted'
$response->deleted; // true

Agents Resource

Note 注意

The Agents API is in beta. The client sends the required OpenAI-Beta: agents=v1 header for you.

create

Creates a reusable agent.

$response = $client->agents()->create([
    'model' => 'gpt-5.4',
    'name' => 'Support Agent',
    'instructions' => 'Answer billing questions.',
    'tools' => [
        [
            'type' => 'function',
            'name' => 'get_invoice',
            'description' => 'Look up an invoice by its number.',
            'parameters' => [
                'type' => 'object',
                'properties' => [
                    'number' => ['type' => 'string'],
                ],
                'required' => ['number'],
            ],
        ],
    ],
]);

$response->id; // 'agent_abc123'
$response->object; // 'agent'
$response->model; // 'gpt-5.4'
$response->name; // 'Support Agent'
$response->text->verbosity; // 'medium'
$response->tools; // [['type' => 'function', 'name' => 'get_invoice', ...]]

$response->toArray(); // ['id' => 'agent_abc123', ...]
list

Lists the reusable agents in the current project.

$response = $client->agents()->list([
    'limit' => 10,
]);

$response->object; // 'list'
$response->firstId; // 'agent_abc123'
$response->lastId; // 'agent_abc123'
$response->hasMore; // false

foreach ($response->data as $result) {
    $result->id; // 'agent_abc123'
    $result->name; // 'Support Agent'
}

$response->toArray(); // ['object' => 'list', 'data' => [...], ...]
retrieve

Retrieves a reusable agent by its ID.

$response = $client->agents()->retrieve('agent_abc123');

$response->id; // 'agent_abc123'
$response->instructions; // 'Answer billing questions.'

$response->toArray(); // ['id' => 'agent_abc123', ...]
update

Updates a reusable agent.

$response = $client->agents()->update('agent_abc123', [
    'reasoning' => [
        'effort' => 'low',
    ],
]);

$response->reasoning->effort; // 'low'
$response->updatedAt; // 1760000100
delete

Deletes a reusable agent.

$response = $client->agents()->delete('agent_abc123');

$response->id; // 'agent_abc123'
$response->object; // 'agent.deleted'
$response->deleted; // true

$response->toArray(); // ['id' => 'agent_abc123', ...]

Agents Environments Resource

Note 注意

The Agents API is in beta. The client sends the required OpenAI-Beta: agents=v1 header for you.

create

Creates an OpenAI-hosted environment for agent sessions. This requires access to the prewarming beta.

$response = $client->agents()->environments()->create([
    'environment' => [
        'type' => 'openai_hosted',
        'environment_template_id' => 'envtmpl_abc123',
    ],
]);

$response->id; // 'env_abc123'
$response->object; // 'agent.environment'
$response->status; // 'pending'

$response->toArray(); // ['id' => 'env_abc123', ...]
list

Lists the agent environments in the current project.

$response = $client->agents()->environments()->list([
    'limit' => 10,
]);

foreach ($response->data as $result) {
    $result->id; // 'env_abc123'
    $result->status; // 'ready'
}
retrieve

Retrieves an agent environment by its ID.

$response = $client->agents()->environments()->retrieve('env_abc123');

$response->status; // 'ready'
$response->skills; // [['type' => 'skill_reference', 'skill_id' => 'skill_abc123', ...]]

Agents Environments Templates Resource

create

Creates a reusable environment template. Environment variables and setup commands are write-only and are never returned.

$response = $client->agents()->environments()->templates()->create([
    'name' => 'Python data tools',
    'packages' => ['python' => ['requests']],
    'network' => [
        'access' => 'restricted',
        'allowed_domains' => ['pypi.org', 'files.pythonhosted.org'],
    ],
    'setup_commands' => [
        ['command' => 'pip list'],
    ],
]);

$response->id; // 'envtmpl_abc123'
$response->object; // 'agent.environment.template'
$response->packages->python; // ['requests']
$response->network->allowedDomains; // ['pypi.org', 'files.pythonhosted.org']

$response->toArray(); // ['id' => 'envtmpl_abc123', ...]
list

Lists the environment templates in the current project.

$response = $client->agents()->environments()->templates()->list([
    'limit' => 10,
]);

foreach ($response->data as $result) {
    $result->id; // 'envtmpl_abc123'
    $result->name; // 'Python data tools'
}
retrieve

Retrieves an environment template by its ID.

$response = $client->agents()->environments()->templates()->retrieve('envtmpl_abc123');

$response->name; // 'Python data tools'
$response->desktop->enabled; // false
update

Updates an environment template.

$response = $client->agents()->environments()->templates()->update('envtmpl_abc123', [
    'desktop' => ['enabled' => true],
]);

$response->desktop->enabled; // true
delete

Deletes an environment template.

$response = $client->agents()->environments()->templates()->delete('envtmpl_abc123');

$response->object; // 'agent.environment.template.deleted'
$response->deleted; // true

Agents Environments Files Resource

These endpoints work on an environment that is connected to a session.

create

Writes a file into the environment, replacing any file at the same path.

$response = $client->agents()->environments()->files()->create('env_abc123', [
    'type' => 'inline',
    'path' => '/workspace/hello.txt',
    'data' => base64_encode("hello\n"),
]);

$response->path; // '/workspace/hello.txt'
$response->sizeBytes; // 6
list

Lists the files in the environment. Pass next back as page to get the following page.

$response = $client->agents()->environments()->files()->list('env_abc123', [
    'path' => '/workspace',
]);

foreach ($response->data as $result) {
    $result->path; // '/workspace/hello.txt'
}

$response->hasMore; // false
$response->next; // null

Agents Sessions Resource

Note 注意

The Agents API is in beta. The client sends the required OpenAI-Beta: agents=v1 header for you.

create

Creates a session that runs an agent. Sessions without an environment need an initial input.

$response = $client->agents()->sessions()->create([
    'agent_id' => 'agent_abc123',
    'environment' => ['type' => 'none'],
    'input' => 'Summarise the latest invoice.',
]);

$response->id; // 'sess_abc123'
$response->object; // 'agent.session'
$response->status; // 'in_progress'
$response->agent->model; // 'gpt-5.4-mini'

$response->toArray(); // ['id' => 'sess_abc123', ...]
list

Lists the sessions in the current project.

$response = $client->agents()->sessions()->list([
    'agent_id' => 'agent_abc123',
    'limit' => 10,
]);

foreach ($response->data as $result) {
    $result->id; // 'sess_abc123'
    $result->status; // 'idle'
}
retrieve

Retrieves a session by its ID.

$response = $client->agents()->sessions()->retrieve('sess_abc123');

$response->status; // 'idle'
$response->requiredActions; // []
$response->usage?->totalTokens; // 7377
update

Updates a session’s metadata or agent settings.

$response = $client->agents()->sessions()->update('sess_abc123', [
    'agent' => ['reasoning' => ['effort' => 'low']],
]);

$response->agent->reasoning->effort; // 'low'
delete

Deletes a session.

$response = $client->agents()->sessions()->delete('sess_abc123');

$response->object; // 'agent.session.deleted'
$response->deleted; // true

Agents Sessions Events Resource

create

Sends input to a session, such as a user message, a function call result or a cancellation. The API accepts the events and processes them in the background, so this returns nothing. Retrieve the session to follow its status.

$client->agents()->sessions()->events()->create('sess_abc123', [
    'events' => [
        [
            'type' => 'agent.session.input.message',
            'input' => [
                [
                    'role' => 'user',
                    'content' => [
                        ['type' => 'input_text', 'text' => 'And the one before that?'],
                    ],
                ],
            ],
        ],
    ],
]);

Vaults Resource

Note 注意

The Vaults API is in beta. The client sends the required OpenAI-Beta: agents=v1 header for you.

create

Creates a vault for storing credentials.

$response = $client->vaults()->create([
    'name' => 'Production',
    'metadata' => ['team' => 'support'],
]);

$response->id; // 'vault_abc123'
$response->object; // 'vault'
$response->name; // 'Production'
$response->metadata; // ['team' => 'support']

$response->toArray(); // ['id' => 'vault_abc123', ...]
list

Lists the vaults in the current project.

$response = $client->vaults()->list([
    'limit' => 10,
]);

$response->object; // 'list'
$response->hasMore; // false

foreach ($response->data as $result) {
    $result->id; // 'vault_abc123'
    $result->name; // 'Production'
}

$response->toArray(); // ['object' => 'list', 'data' => [...], ...]
retrieve

Retrieves a vault by its ID.

$response = $client->vaults()->retrieve('vault_abc123');

$response->id; // 'vault_abc123'
$response->name; // 'Production'
update

Updates a vault.

$response = $client->vaults()->update('vault_abc123', [
    'name' => 'Staging',
]);

$response->name; // 'Staging'
delete

Deletes a vault.

$response = $client->vaults()->delete('vault_abc123');

$response->id; // 'vault_abc123'
$response->object; // 'vault.deleted'
$response->deleted; // true

Vaults Credentials Resource

create

Stores a credential in a vault. Secret values are write-only and are never returned.

$response = $client->vaults()->credentials()->create('vault_abc123', [
    'name' => 'Docs MCP token',
    'auth' => [
        'type' => 'static_bearer',
        'mcp_server_url' => 'https://example.com/mcp',
        'token' => 'your-token',
    ],
]);

$response->id; // 'credential_abc123'
$response->object; // 'vault.credential'
$response->vaultId; // 'vault_abc123'
$response->auth; // ['type' => 'static_bearer', 'mcp_server_url' => 'https://example.com/mcp']

$response->toArray(); // ['id' => 'credential_abc123', ...]
list

Lists the credentials in a vault.

$response = $client->vaults()->credentials()->list('vault_abc123', [
    'status' => 'active',
]);

foreach ($response->data as $result) {
    $result->id; // 'credential_abc123'
    $result->name; // 'Docs MCP token'
}
retrieve

Retrieves a credential from a vault.

$response = $client->vaults()->credentials()->retrieve('vault_abc123', 'credential_abc123');

$response->name; // 'Docs MCP token'
$response->auth['type']; // 'static_bearer'
update

Updates a credential, for example to rotate its secret.

$response = $client->vaults()->credentials()->update('vault_abc123', 'credential_abc123', [
    'auth' => [
        'type' => 'static_bearer',
        'token' => 'your-new-token',
    ],
]);

$response->updatedAt; // 1760000100
delete

Deletes a credential from a vault.

$response = $client->vaults()->credentials()->delete('vault_abc123', 'credential_abc123');

$response->object; // 'vault.credential.deleted'
$response->deleted; // true

Chat Resource

create

Creates a completion for the chat message.

$response = $client->chat()->create([
    'model' => 'gpt-3.5-turbo',
    'messages' => [
        ['role' => 'user', 'content' => 'Hello!'],
    ],
]);

$response->id; // 'chatcmpl-6pMyfj1HF4QXnfvjtfzvufZSQq6Eq'
$response->object; // 'chat.completion'
$response->created; // 1677701073
$response->model; // 'gpt-3.5-turbo-0301'

foreach ($response->choices as $choice) {
    $choice->index; // 0
    $choice->message->role; // 'assistant'
    $choice->message->content; // '\n\nHello there! How can I assist you today?'
    $choice->logprobs; // null
    $choice->finishReason; // 'stop'
}

$response->usage->promptTokens; // 9,
$response->usage->completionTokens; // 12,
$response->usage->totalTokens; // 21

$response->toArray(); // ['id' => 'chatcmpl-6pMyfj1HF4QXnfvjtfzvufZSQq6Eq', ...]

Creates a completion for the chat message with a tool call.

$response = $client->chat()->create([
    'model' => 'gpt-3.5-turbo-0613',
    'messages' => [
        ['role' => 'user', 'content' => 'What\'s the weather like in Boston?'],
    ],
    'tools' => [
        [
            'type' => 'function',
            'function' => [
                'name' => 'get_current_weather',
                'description' => 'Get the current weather in a given location',
                'parameters' => [
                    'type' => 'object',
                    'properties' => [
                        'location' => [
                            'type' => 'string',
                            'description' => 'The city and state, e.g. San Francisco, CA',
                        ],
                        'unit' => [
                            'type' => 'string',
                            'enum' => ['celsius', 'fahrenheit']
                        ],
                    ],
                    'required' => ['location'],
                ],
            ],
        ]
    ]
]);

$response->id; // 'chatcmpl-6pMyfj1HF4QXnfvjtfzvufZSQq6Eq'
$response->object; // 'chat.completion'
$response->created; // 1677701073
$response->model; // 'gpt-3.5-turbo-0613'

foreach ($response->choices as $choice) {
    $choice->index; // 0
    $choice->message->role; // 'assistant'
    $choice->message->content; // null
    $choice->message->toolCalls[0]->id; // 'call_123'
    $choice->message->toolCalls[0]->type; // 'function'
    $choice->message->toolCalls[0]->function->name; // 'get_current_weather'
    $choice->message->toolCalls[0]->function->arguments; // "{\n  \"location\": \"Boston, MA\"\n}"
    $choice->finishReason; // 'tool_calls'
}

$response->usage->promptTokens; // 82,
$response->usage->completionTokens; // 18,
$response->usage->totalTokens; // 100

Creates a completion for the chat message with a function call.

$response = $client->chat()->create([
    'model' => 'gpt-3.5-turbo-0613',
    'messages' => [
        ['role' => 'user', 'content' => 'What\'s the weather like in Boston?'],
    ],
    'functions' => [
        [
            'name' => 'get_current_weather',
            'description' => 'Get the current weather in a given location',
            'parameters' => [
                'type' => 'object',
                'properties' => [
                    'location' => [
                        'type' => 'string',
                        'description' => 'The city and state, e.g. San Francisco, CA',
                    ],
                    'unit' => [
                        'type' => 'string',
                        'enum' => ['celsius', 'fahrenheit']
                    ],
                ],
                'required' => ['location'],
            ],
        ]
    ]
]);

$response->id; // 'chatcmpl-6pMyfj1HF4QXnfvjtfzvufZSQq6Eq'
$response->object; // 'chat.completion'
$response->created; // 1677701073
$response->model; // 'gpt-3.5-turbo-0613'

foreach ($response->choices as $choice) {
    $choice->index; // 0
    $choice->message->role; // 'assistant'
    $choice->message->content; // null
    $choice->message->functionCall->name; // 'get_current_weather'
    $choice->message->functionCall->arguments; // "{\n  \"location\": \"Boston, MA\"\n}"
    $choice->finishReason; // 'function_call'
}

$response->usage->promptTokens; // 82,
$response->usage->completionTokens; // 18,
$response->usage->totalTokens; // 100

Creates a chat completion with image input via image_url.
Useful for describing and analyzing visual content.

$response = $client->chat()->create([
    'model' => 'gpt-4o',
    'messages' => [
        [
            'role' => 'user',
            'content' => [
                ['type' => 'text', 'text' => 'What is in this image?'],
                // Replace with a real, accessible image
                ['type' => 'image_url', 'image_url' => ['url' => 'https://example.com/image.jpg']], 
            ]
        ]
    ]
]);
create streamed

Creates a streamed completion for the chat message.

$stream = $client->chat()->createStreamed([
    'model' => 'gpt-4o',
    'messages' => [
        ['role' => 'user', 'content' => 'Hello!'],
    ],
]);

foreach($stream as $response){
    $response->choices[0]->toArray();
}
// 1. iteration => ['index' => 0, 'delta' => ['role' => 'assistant'], 'finish_reason' => null]
// 2. iteration => ['index' => 0, 'delta' => ['content' => 'Hello'], 'finish_reason' => null]
// 3. iteration => ['index' => 0, 'delta' => ['content' => '!'], 'finish_reason' => null]
// ...

To get usage report when using stream you can use include_usage in stream_options .

$stream = $client->chat()->createStreamed([
    'model' => 'gpt-4',
    'messages' => [
        ['role' => 'user', 'content' => 'Hello!'],
    ],
    'stream_options'=>[
        'include_usage' => true,
    ]
]);

foreach($stream as $response){
    if($response->usage !== null){
        $response->usage->promptTokens; // 9,
        $response->usage->completionTokens; // 12,
        $response->usage->totalTokens; // 21
    }
}

usage is always null except for the last chunk which contains the token usage statistics for the entire request.

Audio Resource

speech

Generates audio from the input text.

$client->audio()->speech([
    'model' => 'tts-1',
    'input' => 'The quick brown fox jumped over the lazy dog.',
    'voice' => 'alloy',
]); // audio file content as string
speechStreamed

Generates streamed audio from the input text.

$stream = $client->audio()->speechStreamed([
    'model' => 'tts-1',
    'input' => 'The quick brown fox jumped over the lazy dog.',
    'voice' => 'alloy',
]);

foreach($stream as $chunk){
    $chunk; // chunk of audio file content as string
}
transcribe

Transcribes audio into the input language.

$response = $client->audio()->transcribe([
    'model' => 'whisper-1',
    'file' => fopen('audio.mp3', 'r'),
    'response_format' => 'verbose_json',
    'timestamp_granularities' => ['segment', 'word']
]);

$response->task; // 'transcribe'
$response->language; // 'english'
$response->duration; // 2.95
$response->text; // 'Hello, how are you?'

foreach ($response->segments as $segment) {
    $segment->index; // 0
    $segment->seek; // 0
    $segment->start; // 0.0
    $segment->end; // 4.0
    $segment->text; // 'Hello, how are you?'
    $segment->tokens; // [50364, 2425, 11, 577, 366, 291, 30, 50564]
    $segment->temperature; // 0.0
    $segment->avgLogprob; // -0.45045216878255206
    $segment->compressionRatio; // 0.7037037037037037
    $segment->noSpeechProb; // 0.1076972484588623
    $segment->transient; // false
}

foreach ($response->words as $word) {
    $word->word; // 'Hello'
    $word->start; // 0.31
    $word->end; // 0.92
}

$response->toArray(); // ['task' => 'transcribe', ...]
transcribe streamed

Transcribes audio into the input language with streaming.

$stream = $client->audio()->transcribeStreamed([
    'model' => 'gpt-4o-transcribe',
    'file' => fopen('audio.mp3', 'r'),
]);

foreach ($stream as $event) {
    echo json_encode($event->toArray()); // {"event":"transcript.text.delta","data":{"delta":"The"}}
}
translate

Translates audio into English.

$response = $client->audio()->translate([
    'model' => 'whisper-1',
    'file' => fopen('german.mp3', 'r'),
    'response_format' => 'verbose_json',
]);

$response->task; // 'translate'
$response->language; // 'english'
$response->duration; // 2.95
$response->text; // 'Hello, how are you?'

foreach ($response->segments as $segment) {
    $segment->index; // 0
    $segment->seek; // 0
    $segment->start; // 0.0
    $segment->end; // 4.0
    $segment->text; // 'Hello, how are you?'
    $segment->tokens; // [50364, 2425, 11, 577, 366, 291, 30, 50564]
    $segment->temperature; // 0.0
    $segment->avgLogprob; // -0.45045216878255206
    $segment->compressionRatio; // 0.7037037037037037
    $segment->noSpeechProb; // 0.1076972484588623
    $segment->transient; // false
}

$response->toArray(); // ['task' => 'translate', ...]

Embeddings Resource

create

Creates an embedding vector representing the input text.

$response = $client->embeddings()->create([
    'model' => 'text-similarity-babbage-001',
    'input' => 'The food was delicious and the waiter...',
]);

$response->object; // 'list'

foreach ($response->embeddings as $embedding) {
    $embedding->object; // 'embedding'
    $embedding->model; // 'text-similarity-babbage-001'
    $embedding->embedding; // [0.018990106880664825, -0.0073809814639389515, ...]
    $embedding->index; // 0
}

$response->usage->promptTokens; // 8,
$response->usage->totalTokens; // 8

$response->toArray(); // ['data' => [...], ...]

Files Resource

list

Returns a list of files that belong to the user’s organization.

$response = $client->files()->list();

$response->object; // 'list'

foreach ($response->data as $result) {
    $result->id; // 'file-XjGxS3KTG0uNmNOK362iJua3'
    $result->object; // 'file'
    // ...
}

$response->toArray(); // ['object' => 'list', 'data' => [...]]
delete

Delete a file.

$response = $client->files()->delete($file);

$response->id; // 'file-XjGxS3KTG0uNmNOK362iJua3'
$response->object; // 'file'
$response->deleted; // true

$response->toArray(); // ['id' => 'file-XjGxS3KTG0uNmNOK362iJua3', ...]
retrieve

Returns information about a specific file.

$response = $client->files()->retrieve('file-XjGxS3KTG0uNmNOK362iJua3');

$response->id; // 'file-XjGxS3KTG0uNmNOK362iJua3'
$response->object; // 'file'
$response->bytes; // 140
$response->createdAt; // 1613779657
$response->filename; // 'mydata.jsonl'
$response->purpose; // 'fine-tune'
$response->status; // 'succeeded'
$response->status_details; // null

$response->toArray(); // ['id' => 'file-XjGxS3KTG0uNmNOK362iJua3', ...]
upload

Upload a file that contains document(s) to be used across various endpoints/features.

$response = $client->files()->upload([
        'purpose' => 'fine-tune',
        'file' => fopen('my-file.jsonl', 'r'),
    ]);

$response->id; // 'file-XjGxS3KTG0uNmNOK362iJua3'
$response->object; // 'file'
$response->bytes; // 140
$response->createdAt; // 1613779657
$response->filename; // 'mydata.jsonl'
$response->purpose; // 'fine-tune'
$response->status; // 'succeeded'
$response->status_details; // null

$response->toArray(); // ['id' => 'file-XjGxS3KTG0uNmNOK362iJua3', ...]
download

Returns the contents of the specified file.

$client->files()->download($file); // '{"prompt": "<prompt text>", ...'

FineTuning Resource

create job

Creates a job that fine-tunes a specified model from a given dataset.

$response = $client->fineTuning()->createJob([
    'training_file' => 'file-abc123',
    'validation_file' => null,
    'model' => 'gpt-3.5-turbo',
    'hyperparameters' => [
        'n_epochs' => 4,
    ],
    'suffix' => null,
]);

$response->id; // 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F'
$response->object; // 'fine_tuning.job'
$response->model; // 'gpt-3.5-turbo-0613'
$response->fineTunedModel; // null
// ...

$response->toArray(); // ['id' => 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F', ...]
list jobs

List your organization’s fine-tuning jobs.

$response = $client->fineTuning()->listJobs();

$response->object; // 'list'

foreach ($response->data as $result) {
    $result->id; // 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F'
    $result->object; // 'fine_tuning.job'
    // ...
}

$response->toArray(); // ['object' => 'list', 'data' => [...]]

You can pass additional parameters to the listJobs method to narrow down the results.

$response = $client->fineTuning()->listJobs([
    'limit' => 3, // Number of jobs to retrieve (Default: 20)
    'after' => 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F', // Identifier for the last job from the previous pagination request.
]);
retrieve job

Get info about a fine-tuning job.

$response = $client->fineTuning()->retrieveJob('ftjob-AF1WoRqd3aJAHsqc9NY7iL8F');

$response->id; // 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F'
$response->object; // 'fine_tuning.job'
$response->model; // 'gpt-3.5-turbo-0613'
$response->createdAt; // 1614807352
$response->finishedAt; // 1692819450
$response->fineTunedModel; // 'ft:gpt-3.5-turbo-0613:jwe-dev::7qnxQ0sQ'
$response->organizationId; // 'org-jwe45798ASN82s'
$response->resultFiles[0]; // 'file-1bl05WrhsKDDEdg8XSP617QF'
$response->status; // 'succeeded'
$response->validationFile; // null
$response->trainingFile; // 'file-abc123'
$response->trainedTokens; // 5049

$response->hyperparameters->nEpochs; // 9

$response->toArray(); // ['id' => 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F', ...]
cancel job

Immediately cancel a fine-tune job.

$response = $client->fineTuning()->cancelJob('ftjob-AF1WoRqd3aJAHsqc9NY7iL8F');

$response->id; // 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F'
$response->object; // 'fine_tuning.job'
// ...
$response->status; // 'cancelled'
// ...

$response->toArray(); // ['id' => 'ftjob-AF1WoRqd3aJAHsqc9NY7iL8F', ...]
list job events

Get status updates for a fine-tuning job.

$response = $client->fineTuning()->listJobEvents('ftjob-AF1WoRqd3aJAHsqc9NY7iL8F');

$response->object; // 'list'

foreach ($response->data as $result) {
    $result->object; // 'fine_tuning.job.event' 
    $result->createdAt; // 1614807352
    // ...
}

$response->toArray(); // ['object' => 'list', 'data' => [...]]

You can pass additional parameters to the listJobEvents method to narrow down the results.

$response = $client->fineTuning()->listJobEvents('ftjob-AF1WoRqd3aJAHsqc9NY7iL8F', [
    'limit' => 3, // Number of events to retrieve (Default: 20)
    'after' => 'ftevent-kLPSMIcsqshEUEJVOVBVcHlP', // Identifier for the last event from the previous pagination request.
]);

Decisions Resource

create

Evaluates text, images, or both against a list of questions. A question has the type predicate, choice, or score.

$response = $client->decisions()->create([
    'model' => 'gpt-6-luna',
    'input' => 'Please refund my order. This is the third time I ask.',
    'questions' => [
        [
            'type' => 'predicate',
            'name' => 'wants_refund',
            'instructions' => 'The customer asks for a refund.',
        ],
        [
            'type' => 'choice',
            'name' => 'sentiment',
            'instructions' => 'Pick the tone of the message.',
            'choices' => [
                ['value' => 'positive', 'description' => 'The tone is happy.'],
                ['value' => 'negative', 'description' => 'The tone is angry or upset.'],
            ],
        ],
        [
            'type' => 'score',
            'name' => 'urgency',
            'instructions' => 'Rate how urgent the request is.',
            'levels' => [
                ['label' => 'low', 'description' => 'No time pressure.'],
                ['label' => 'high', 'description' => 'The customer needs help now.'],
            ],
        ],
    ],
]);

$response->model; // 'gpt-6-luna'

foreach ($response->answers as $answer) {
    $answer->type; // 'predicate', 'choice', 'score' or 'refusal'
    $answer->name; // 'wants_refund'
}

$response->answer('wants_refund')->probability; // 0.98
$response->answer('sentiment')->choice; // 'negative'
$response->answer('urgency')->score; // 1.7

$response->usage?->inputTokens; // 154
$response->usage?->inputTokensDetails->cachedTokens; // 0
$response->usage?->totalTokens; // 154

$response->toArray(); // ['model' => 'gpt-6-luna', 'answers' => [...], 'usage' => [...]]

Moderations Resource

create

Classifies if text violates OpenAI’s Content Policy.


$response = $client->moderations()->create([
    'model' => 'text-moderation-latest',
    'input' => 'I want to k*** them.',
]);

$response->id; // modr-5xOyuS
$response->model; // text-moderation-003

foreach ($response->results as $result) {
    $result->flagged; // true

    foreach ($result->categories as $category) {
        $category->category->value; // 'violence'
        $category->violated; // true
        $category->score; // 0.97431367635727
    }
}

$response->toArray(); // ['id' => 'modr-5xOyuS', ...]

Images Resource

create

Creates an image given a prompt.

$response = $client->images()->create([
    'model' => 'dall-e-3',
    'prompt' => 'A cute baby sea otter',
    'n' => 1,
    'size' => '1024x1024',
    'response_format' => 'url',
]);

$response->created; // 1589478378

foreach ($response->data as $data) {
    $data->url; // 'https://oaidalleapiprodscus.blob.core.windows.net/private/...'
    $data->b64_json; // null
}

$response->toArray(); // ['created' => 1589478378, data => ['url' => 'https://oaidalleapiprodscus...', ...]]
create streamed

When 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.

$stream = $client->images()->createStreamed([
    'model' => 'gpt-image-1',
    'prompt' => 'A cute baby sea otter',
    'n' => 1,
    'size' => '1024x1024',
    'response_format' => 'url',
]);

foreach ($stream as $image) {
    $image->type; // 'image_generation.partial_image'
}
edit

Creates an edited or extended image given an original image and a prompt.

$response = $client->images()->edit([
    'image' => fopen('image_edit_original.png', 'r'),
    'mask' => fopen('image_edit_mask.png', 'r'),
    'prompt' => 'A sunlit indoor lounge area with a pool containing a flamingo',
    'n' => 1,
    'size' => '256x256',
    'response_format' => 'url',
]);

$response->created; // 1589478378

foreach ($response->data as $data) {
    $data->url; // 'https://oaidalleapiprodscus.blob.core.windows.net/private/...'
    $data->b64_json; // null
}

$response->toArray(); // ['created' => 1589478378, data => ['url' => 'https://oaidalleapiprodscus...', ...]]
edit streamed

When 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.

$stream = $client->images()->editStreamed([
    'model' => 'gpt-image-1',
    'prompt' => 'A cute baby sea otter',
    'n' => 1,
    'size' => '1024x1024',
    'response_format' => 'url',
]);

foreach ($stream as $image) {
    $image->type; // 'image_generation.partial_image'
}
variation

Creates a variation of a given image.

$response = $client->images()->variation([
    'image' => fopen('image_edit_original.png', 'r'),
    'n' => 1,
    'size' => '256x256',
    'response_format' => 'url',
]);

$response->created; // 1589478378

foreach ($response->data as $data) {
    $data->url; // 'https://oaidalleapiprodscus.blob.core.windows.net/private/...'
    $data->b64_json; // null
}

$response->toArray(); // ['created' => 1589478378, data => ['url' => 'https://oaidalleapiprodscus...', ...]]

Batches Resource

create

Creates a batch.


$fileResponse = $client->files()->upload(
     parameters: [
          'purpose' => 'batch',
          'file' => fopen('commands.jsonl', 'r'),
    ]
);

$fileId = $fileResponse->id;

$response = $client->batches()->create(
    parameters: [
        'input_file_id' => $fileId,
        'endpoint' => '/v1/chat/completions',
        'completion_window' => '24h'
    ]
 );

$response->id; // 'batch_abc123'
$response->object; // 'batch'
$response->endpoint; // /v1/chat/completions
$response->errors; // null
$response->completionWindow; // '24h'
$response->status; // 'validating'
$response->outputFileId; // null
$response->errorFileId; // null
$response->createdAt; // 1714508499
$response->inProgressAt; // null
$response->expiresAt; // 1714536634
$response->completedAt; // null
$response->failedAt; // null
$response->expiredAt; // null
$response->requestCounts; // null
$response->metadata; // ['name' => 'My batch name']

$response->toArray(); // ['id' => 'batch_abc123', ...]
retrieve

Retrieves a batch.

$response = $client->batches()->retrieve(id: 'batch_abc123');

$response->id; // 'batch_abc123'
$response->object; // 'batch'
$response->endpoint; // /v1/chat/completions
$response->errors; // null
$response->completionWindow; // '24h'
$response->status; // 'validating'
$response->outputFileId; // null
$response->errorFileId; // null
$response->createdAt; // 1714508499
$response->inProgressAt; // null
$response->expiresAt; // 1714536634
$response->completedAt; // null
$response->failedAt; // null
$response->expiredAt; // null
$response->requestCounts->total; // 100
$response->requestCounts->completed; // 95
$response->requestCounts->failed; // 5
$response->metadata; // ['name' => 'My batch name']

$response->toArray(); // ['id' => 'batch_abc123', ...]
cancel

Cancels a batch.

$response = $client->batches()->cancel(id: 'batch_abc123');

$response->id; // 'batch_abc123'
$response->object; // 'batch'
$response->endpoint; // /v1/chat/completions
$response->errors; // null
$response->completionWindow; // '24h'
$response->status; // 'cancelling'
$response->outputFileId; // null
$response->errorFileId; // null
$response->createdAt; // 1711471533
$response->inProgressAt; // 1711471538
$response->expiresAt; // 1711557933
$response->cancellingAt; // 1711475133
$response->cancelledAt; // null
$response->requestCounts->total; // 100
$response->requestCounts->completed; // 23
$response->requestCounts->failed; // 1
$response->metadata; // ['name' => 'My batch name']

$response->toArray(); // ['id' => 'batch_abc123', ...]
list

Returns a list of batches.

$response = $client->batches()->list(
    parameters: [
        'limit' => 10, 
    ],
);

$response->object; // 'list'
$response->firstId; // 'batch_abc123'
$response->lastId; // 'batch_abc456'
$response->hasMore; // true

foreach ($response->data as $result) {
    $result->id; // 'batch_abc123'
    // ...
}

$response->toArray(); // ['object' => 'list', ...]]

Vector Stores Resource

create

Create a vector store.

$response = $client->vectorStores()->create([
    'file_ids' => [
        'file-fUU0hFRuQ1GzhOweTNeJlCXG',
    ],
    'name' => 'My first Vector Store',
]);

$response->id; // 'vs_vzfQhlTWVUl38QGqQAoQjeDF'
$response->object; // 'vector_store'
$response->createdAt; // 1717703267
$response->name; // 'My first Vector Store'
$response->usageBytes; // 0
$response->fileCounts->inProgress; // 1
$response->fileCounts->completed; // 0
$response->fileCounts->failed; // 0
$response->fileCounts->cancelled; // 0
$response->fileCounts->total; // 1
$response->status; // 'in_progress'
$response->expiresAfter; // null
$response->expiresAt; // null
$response->lastActiveAt; // 1717703267

$response->toArray(); // ['id' => 'vs_vzfQhlTWVUl38QGqQAoQjeDF', ...]
retrieve

Retrieves a vector store.

$response = $client->vectorStores()->retrieve(
    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',
);

$response->id; // 'vs_vzfQhlTWVUl38QGqQAoQjeDF'
$response->object; // 'vector_store'
$response->createdAt; // 1717703267
$response->name; // 'My first Vector Store'
$response->usageBytes; // 0
$response->fileCounts->inProgress; // 1
$response->fileCounts->completed; // 0
$response->fileCounts->failed; // 0
$response->fileCounts->cancelled; // 0
$response->fileCounts->total; // 1
$response->status; // 'in_progress'
$response->expiresAfter; // null
$response->expiresAt; // null
$response->lastActiveAt; // 1717703267

$response->toArray(); // ['id' => 'vs_vzfQhlTWVUl38QGqQAoQjeDF', ...]
modify

Modifies a vector store.

$response = $client->vectorStores()->modify(
    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',
    parameters:  [
        'name' => 'New name',
    ],
);

$response->id; // 'vs_vzfQhlTWVUl38QGqQAoQjeDF'
$response->object; // 'vector_store'
$response->createdAt; // 1717703267
$response->name; // 'New name'
$response->usageBytes; // 0
$response->fileCounts->inProgress; // 1
$response->fileCounts->completed; // 0
$response->fileCounts->failed; // 0
$response->fileCounts->cancelled; // 0
$response->fileCounts->total; // 1
$response->status; // 'in_progress'
$response->expiresAfter; // null
$response->expiresAt; // null
$response->lastActiveAt; // 1717703267

$response->toArray(); // ['id' => 'vs_vzfQhlTWVUl38QGqQAoQjeDF', ...]
delete

Delete a vector store.

$response = $client->vectorStores()->delete(
    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',
);

$response->id; // 'vs_vzfQhlTWVUl38QGqQAoQjeDF'
$response->object; // 'vector_store.deleted'
$response->deleted; // true

$response->toArray(); // ['id' => 'vs_vzfQhlTWVUl38QGqQAoQjeDF', ...]
list

Returns a list of vector stores.

$response = $client->vectorStores()->list(
    parameters: [
        'limit' => 10,
    ],
);

$response->object; // 'list'
$response->firstId; // 'vs_vzfQhlTWVUl38QGqQAoQjeDF'
$response->lastId; // 'vs_D5DPOgBxSoEBTmYBgUESdPpa'
$response->hasMore; // true

foreach ($response->data as $result) {
    $result->id; // 'vs_vzfQhlTWVUl38QGqQAoQjeDF'
    // ...
}

$response->toArray(); // ['object' => 'list', ...]]

Vector Store Files Resource

create

Create a vector store file by attaching a File to a vector store.

$response = $client->vectorStores()->files()->create(
    vectorStoreId: 'vs_vzfQhlTWVUl38QGqQAoQjeDF',
    parameters: [
        'file_id' => 'file-fUU0hFRuQ1GzhOweTNeJlCXG',
    ]
);

$response->id; // 'file-fUU0hFRuQ1GzhOweTNeJlCXG'
$response->object; // 'vector_store.file'
$response->usageBytes; // 4553
$response->createdAt; // 1717703267
$response->vectorStoreId; // 'vs_vzfQhlTWVUl38QGqQAoQjeDF'
$response->status; // 'completed'
$response->lastError; // null
$response->chunkingStrategy->type; // 'static'
$response->chunkingStrategy->maxChunkSizeTokens; // 800
$response->chunkingStrategy->chunkOverlapTokens; // 400

$response->toArray(); // ['id' => 'file-fUU0hFRuQ1GzhOweTNeJlCXG', ...]
retrieve

Retrieves a vector store file.

$response = $client->vectorStores()->files()->retrieve(
    vectorStoreId</prompt>

> README 内容过长,已截取前 64 KB。完整内容请前往 GitHub 仓库查看。

评论

暂无评论