calendi/backend/src/Domain/Chat/ToolCall.php
2025-04-26 04:16:02 +02:00

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,
);
}
}