Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions src/Actions/Responses/OutputObjects.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace OpenAI\Actions\Responses;

use OpenAI\Responses\Responses\Output\OutputCodeInterpreterToolCall;
use OpenAI\Responses\Responses\Output\OutputCompaction;
use OpenAI\Responses\Responses\Output\OutputComputerToolCall;
use OpenAI\Responses\Responses\Output\OutputCustomToolCall;
use OpenAI\Responses\Responses\Output\OutputFileSearchToolCall;
Expand Down Expand Up @@ -32,13 +33,14 @@
* @phpstan-import-type OutputMcpCallType from OutputMcpCall
* @phpstan-import-type OutputImageGenerationToolCallType from OutputImageGenerationToolCall
* @phpstan-import-type OutputCodeInterpreterToolCallType from OutputCodeInterpreterToolCall
* @phpstan-import-type OutputCompactionType from OutputCompaction
* @phpstan-import-type OutputLocalShellCallType from OutputLocalShellCall
* @phpstan-import-type OutputCustomToolCallType from OutputCustomToolCall
* @phpstan-import-type OutputToolSearchCallType from OutputToolSearchCall
* @phpstan-import-type OutputToolSearchOutputType from OutputToolSearchOutput
*
* @phpstan-type ResponseOutputObjectTypes array<int, OutputComputerToolCallType|OutputFileSearchToolCallType|OutputFunctionToolCallType|OutputMessageType|OutputReasoningType|OutputWebSearchToolCallType|OutputMcpListToolsType|OutputMcpApprovalRequestType|OutputMcpCallType|OutputImageGenerationToolCallType|OutputCodeInterpreterToolCallType|OutputLocalShellCallType|OutputCustomToolCallType|OutputToolSearchCallType|OutputToolSearchOutputType>
* @phpstan-type ResponseOutputObjectReturnType array<int, OutputMessage|OutputComputerToolCall|OutputFileSearchToolCall|OutputWebSearchToolCall|OutputFunctionToolCall|OutputReasoning|OutputMcpListTools|OutputMcpApprovalRequest|OutputMcpCall|OutputImageGenerationToolCall|OutputCodeInterpreterToolCall|OutputLocalShellCall|OutputCustomToolCall|OutputToolSearchCall|OutputToolSearchOutput>
* @phpstan-type ResponseOutputObjectTypes array<int, OutputComputerToolCallType|OutputFileSearchToolCallType|OutputFunctionToolCallType|OutputMessageType|OutputReasoningType|OutputWebSearchToolCallType|OutputMcpListToolsType|OutputMcpApprovalRequestType|OutputMcpCallType|OutputImageGenerationToolCallType|OutputCodeInterpreterToolCallType|OutputLocalShellCallType|OutputCustomToolCallType|OutputToolSearchCallType|OutputToolSearchOutputType|OutputCompactionType>
* @phpstan-type ResponseOutputObjectReturnType array<int, OutputMessage|OutputComputerToolCall|OutputFileSearchToolCall|OutputWebSearchToolCall|OutputFunctionToolCall|OutputReasoning|OutputMcpListTools|OutputMcpApprovalRequest|OutputMcpCall|OutputImageGenerationToolCall|OutputCodeInterpreterToolCall|OutputLocalShellCall|OutputCustomToolCall|OutputToolSearchCall|OutputToolSearchOutput|OutputCompaction>
*/
final class OutputObjects
{
Expand All @@ -49,7 +51,7 @@ final class OutputObjects
public static function parse(array $outputItems): array
{
return array_map(
fn (array $item): OutputMessage|OutputComputerToolCall|OutputFileSearchToolCall|OutputWebSearchToolCall|OutputFunctionToolCall|OutputReasoning|OutputMcpListTools|OutputMcpApprovalRequest|OutputMcpCall|OutputImageGenerationToolCall|OutputCodeInterpreterToolCall|OutputLocalShellCall|OutputCustomToolCall|OutputToolSearchCall|OutputToolSearchOutput => match ($item['type']) {
fn (array $item): OutputMessage|OutputComputerToolCall|OutputFileSearchToolCall|OutputWebSearchToolCall|OutputFunctionToolCall|OutputReasoning|OutputMcpListTools|OutputMcpApprovalRequest|OutputMcpCall|OutputImageGenerationToolCall|OutputCodeInterpreterToolCall|OutputLocalShellCall|OutputCustomToolCall|OutputToolSearchCall|OutputToolSearchOutput|OutputCompaction => match ($item['type']) {
'message' => OutputMessage::from($item),
'file_search_call' => OutputFileSearchToolCall::from($item),
'function_call' => OutputFunctionToolCall::from($item),
Expand All @@ -65,6 +67,7 @@ public static function parse(array $outputItems): array
'custom_tool_call' => OutputCustomToolCall::from($item),
'tool_search_call' => OutputToolSearchCall::from($item),
'tool_search_output' => OutputToolSearchOutput::from($item),
'compaction' => OutputCompaction::from($item),
default => throw new \UnexpectedValueException('Uh oh! We do not recognize this type. Please submit a bug to openai-php/client on GitHub!'),
},
$outputItems,
Expand Down
3 changes: 2 additions & 1 deletion src/Responses/Responses/CreateResponse.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use OpenAI\Responses\Concerns\HasMetaInformation;
use OpenAI\Responses\Meta\MetaInformation;
use OpenAI\Responses\Responses\Output\OutputCodeInterpreterToolCall;
use OpenAI\Responses\Responses\Output\OutputCompaction;
use OpenAI\Responses\Responses\Output\OutputComputerToolCall;
use OpenAI\Responses\Responses\Output\OutputCustomToolCall;
use OpenAI\Responses\Responses\Output\OutputFileSearchToolCall;
Expand Down Expand Up @@ -195,7 +196,7 @@ public function toArray(): array
'metadata' => $this->metadata ?? [],
'model' => $this->model,
'output' => array_map(
fn (OutputMessage|OutputComputerToolCall|OutputFileSearchToolCall|OutputWebSearchToolCall|OutputFunctionToolCall|OutputReasoning|OutputMcpListTools|OutputMcpApprovalRequest|OutputMcpCall|OutputImageGenerationToolCall|OutputCodeInterpreterToolCall|OutputLocalShellCall|OutputCustomToolCall|OutputToolSearchCall|OutputToolSearchOutput $output): array => $output->toArray(),
fn (OutputMessage|OutputComputerToolCall|OutputFileSearchToolCall|OutputWebSearchToolCall|OutputFunctionToolCall|OutputReasoning|OutputMcpListTools|OutputMcpApprovalRequest|OutputMcpCall|OutputImageGenerationToolCall|OutputCodeInterpreterToolCall|OutputLocalShellCall|OutputCustomToolCall|OutputToolSearchCall|OutputToolSearchOutput|OutputCompaction $output): array => $output->toArray(),
$this->output
),
'parallel_tool_calls' => $this->parallelToolCalls,
Expand Down
60 changes: 60 additions & 0 deletions src/Responses/Responses/Output/OutputCompaction.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<?php

declare(strict_types=1);

namespace OpenAI\Responses\Responses\Output;

use OpenAI\Contracts\ResponseContract;
use OpenAI\Responses\Concerns\ArrayAccessible;
use OpenAI\Testing\Responses\Concerns\Fakeable;

/**
* @phpstan-type OutputCompactionType array{id: string, encrypted_content: string, type: 'compaction', created_by?: string|null}
*
* @implements ResponseContract<OutputCompactionType>
*/
final class OutputCompaction implements ResponseContract
{
/**
* @use ArrayAccessible<OutputCompactionType>
*/
use ArrayAccessible;

use Fakeable;

/**
* @param 'compaction' $type
*/
private function __construct(
public readonly string $id,
public readonly string $encryptedContent,
public readonly string $type,
public readonly ?string $createdBy,
) {}

/**
* @param OutputCompactionType $attributes
*/
public static function from(array $attributes): self
{
return new self(
id: $attributes['id'],
encryptedContent: $attributes['encrypted_content'],
type: $attributes['type'],
createdBy: $attributes['created_by'] ?? null,
);
}

/**
* {@inheritDoc}
*/
public function toArray(): array
{
return [
'id' => $this->id,
'encrypted_content' => $this->encryptedContent,
'type' => $this->type,
'created_by' => $this->createdBy,
];
}
}
3 changes: 2 additions & 1 deletion src/Responses/Responses/RetrieveResponse.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use OpenAI\Responses\Concerns\HasMetaInformation;
use OpenAI\Responses\Meta\MetaInformation;
use OpenAI\Responses\Responses\Output\OutputCodeInterpreterToolCall;
use OpenAI\Responses\Responses\Output\OutputCompaction;
use OpenAI\Responses\Responses\Output\OutputComputerToolCall;
use OpenAI\Responses\Responses\Output\OutputCustomToolCall;
use OpenAI\Responses\Responses\Output\OutputFileSearchToolCall;
Expand Down Expand Up @@ -195,7 +196,7 @@ public function toArray(): array
'metadata' => $this->metadata ?? [],
'model' => $this->model,
'output' => array_map(
fn (OutputMessage|OutputComputerToolCall|OutputFileSearchToolCall|OutputWebSearchToolCall|OutputFunctionToolCall|OutputReasoning|OutputMcpListTools|OutputMcpApprovalRequest|OutputMcpCall|OutputImageGenerationToolCall|OutputCodeInterpreterToolCall|OutputLocalShellCall|OutputCustomToolCall|OutputToolSearchCall|OutputToolSearchOutput $output): array => $output->toArray(),
fn (OutputMessage|OutputComputerToolCall|OutputFileSearchToolCall|OutputWebSearchToolCall|OutputFunctionToolCall|OutputReasoning|OutputMcpListTools|OutputMcpApprovalRequest|OutputMcpCall|OutputImageGenerationToolCall|OutputCodeInterpreterToolCall|OutputLocalShellCall|OutputCustomToolCall|OutputToolSearchCall|OutputToolSearchOutput|OutputCompaction $output): array => $output->toArray(),
$this->output
),
'output_text' => $this->outputText,
Expand Down
13 changes: 13 additions & 0 deletions tests/Fixtures/Responses.php
Original file line number Diff line number Diff line change
Expand Up @@ -983,6 +983,19 @@ function outputToolSearchOutput(): array
];
}

/**
* @return array<string, mixed>
*/
function outputCompaction(): array
{
return [
'id' => 'cmp_67ccf18f64008190a39b619f4c8455ef087bb177ab789d5c',
'encrypted_content' => 'encrypted_string_value',
'type' => 'compaction',
'created_by' => 'user_123',
];
}

/**
* @return resource
*/
Expand Down
39 changes: 39 additions & 0 deletions tests/Responses/Responses/Output/OutputCompaction.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

use OpenAI\Responses\Responses\Output\OutputCompaction;

test('from', function () {
$response = OutputCompaction::from(outputCompaction());

expect($response)
->toBeInstanceOf(OutputCompaction::class)
->id->toBe('cmp_67ccf18f64008190a39b619f4c8455ef087bb177ab789d5c')
->encryptedContent->toBe('encrypted_string_value')
->type->toBe('compaction')
->createdBy->toBe('user_123');
});

test('from without created_by', function () {
$attributes = outputCompaction();
unset($attributes['created_by']);

$response = OutputCompaction::from($attributes);

expect($response)
->toBeInstanceOf(OutputCompaction::class)
->createdBy->toBeNull();
});

test('as array accessible', function () {
$response = OutputCompaction::from(outputCompaction());

expect($response['id'])->toBe('cmp_67ccf18f64008190a39b619f4c8455ef087bb177ab789d5c');
});

test('to array', function () {
$response = OutputCompaction::from(outputCompaction());

expect($response->toArray())
->toBeArray()
->toBe(outputCompaction());
});