68 lines
1.4 KiB
PHP
68 lines
1.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Domain\Chat;
|
|
|
|
final class ToolCall
|
|
{
|
|
/**
|
|
* @param array<string, mixed> $arguments
|
|
*/
|
|
public function __construct(
|
|
private readonly string $id,
|
|
private readonly string $type,
|
|
private readonly string $name,
|
|
private readonly array $arguments,
|
|
) {
|
|
}
|
|
|
|
public function getId(): string
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
public function getType(): string
|
|
{
|
|
return $this->type;
|
|
}
|
|
|
|
public function getName(): string
|
|
{
|
|
return $this->name;
|
|
}
|
|
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function getArguments(): array
|
|
{
|
|
return $this->arguments;
|
|
}
|
|
|
|
/**
|
|
* @param array{
|
|
* id: string,
|
|
* type: string,
|
|
* function: array{
|
|
* name: string,
|
|
* arguments: string
|
|
* }
|
|
* } $data
|
|
*/
|
|
public static function fromArray(array $data): self
|
|
{
|
|
$decodedArgs = json_decode($data['function']['arguments'], true);
|
|
|
|
/** @var array<string, mixed> $arguments */
|
|
$arguments = is_array($decodedArgs) ? $decodedArgs : [];
|
|
|
|
return new self(
|
|
id: $data['id'],
|
|
type: $data['type'],
|
|
name: $data['function']['name'],
|
|
arguments: $arguments,
|
|
);
|
|
}
|
|
}
|