data === []) { return; } event(new PerceptronTrainingIteration($this->data, $this->sessionId, $this->trainingId)); $this->data = []; } public function addIteration(int $epoch, int $exampleIndex, float $error, array $synaptic_weights): void { $iteration = [ 'epoch' => $epoch, 'exampleIndex' => $exampleIndex, 'error' => $error, 'weights' => $synaptic_weights, ]; $this->data[] = $iteration; if ($this->data !== [] && $this->payloadExceedsLimit()) { $lastIteration = array_pop($this->data); $this->flush(); $this->data[] = $lastIteration; } if (count($this->data) >= config('perceptron.broadcast_iteration_size')) { $this->flush(); } } private function payloadExceedsLimit(): bool { return strlen(json_encode([ 'iterations' => $this->data, 'trainingId' => $this->trainingId, ], JSON_THROW_ON_ERROR)) > config('broadcasting.broadcast_max_payload_size'); } }