find($this->pressReleaseId); if ($pressRelease === null) { return; } $result = $this->score($manager, $pressRelease); $tier = PressReleaseContentTier::fromScore($result->score); $pressRelease->forceFill([ 'content_score' => $result->score, 'content_tier' => $tier->value, 'scored_at' => now(), ])->save(); KiAudit::query()->create([ 'press_release_id' => $pressRelease->id, 'type' => KiAudit::TYPE_CONTENT_SCORE, 'provider' => $result->provider, 'model' => $result->model, 'result' => (string) $result->score, 'reason' => $tier->label(), 'raw_response' => $result->rawResponse, 'created_at' => now(), ]); } /** * Bewertet über den aktiven (oder explizit gewählten) Treiber; bei Fehler * greift der deterministische Fallback. */ private function score(ContentScoreManager $manager, PressRelease $pressRelease): ContentScoreResult { $provider = $this->providerOverride ?: $manager->getDefaultDriver(); try { return $manager->driver($provider)->score($pressRelease); } catch (\Throwable $exception) { Log::warning('Content-Score fiel auf den deterministischen Treiber zurück.', [ 'press_release_id' => $pressRelease->id, 'provider' => $provider, 'error' => $exception->getMessage(), ]); return $manager->driver('deterministic')->score($pressRelease); } } }