taskId = $taskId; $this->executor = $executor; $this->executorType = $executorType; $this->duration = ExecutionDuration::now(); $this->metrics = ExecutionMetrics::zero(); } public static function for(int $taskId, string $executor, AssigneeType $executorType): self { return new self($taskId, $executor, $executorType); } public function withAssignment(int $assignmentId): self { $this->assignmentId = $assignmentId; return $this; } public function withModel(string $modelName): self { $this->modelName = $modelName; return $this; } public function withRequest(string $request): self { $this->request = $request; return $this; } public function withResponse(string $response): self { $this->response = $response; $this->duration = $this->duration->completeNow(); return $this; } public function withDuration(ExecutionDuration $duration): self { $this->duration = $duration; return $this; } public function withMetrics(ExecutionMetrics $metrics): self { $this->metrics = $metrics; return $this; } public function withTokens(int $input, int $output): self { $this->metrics = $this->metrics->withTokens(TokenCount::create($input, $output)); return $this; } public function withCost(float $costUsd): self { $this->metrics = $this->metrics->withCost($costUsd); return $this; } public function withStatus(ResultStatus $status): self { $this->status = $status; return $this; } public function withError(string $errorMessage): self { $this->errorMessage = $errorMessage; $this->status = ResultStatus::ERROR; return $this; } public function estimateTokens(): self { if ($this->request !== null && $this->response !== null) { $this->metrics = ExecutionMetrics::fromEstimation($this->request, $this->response); } return $this; } public function build(): TaskResult { return new TaskResult( $this->taskId, $this->assignmentId, $this->executor, $this->executorType, $this->modelName, $this->request, $this->response, $this->duration, $this->metrics, $this->status, $this->errorMessage ); } }