presseportale/config/scoring.php
Kevin Adametz a000238ca8 User Panel: Phase-8-Abschluss, Titelbild/Lizenzen/Zeitzonen und KI-Pruef-Pipeline
Phase 8 (Rest) + Umbauten vom 10./11.06.:
- Ein Titelbild pro PM (Cover 1280x580), SVG-Platzhalter-Set + Picker,
  PressReleaseCoverImage-Resolver
- Lizenz-/Rechteformular nach "Lizenztyp Bildupload" (7 Lizenztypen,
  Personen-/Sachrechte-Status, bedingte Pflichtfelder, Risikohinweise)
- Veroeffentlichungs-Box vereinfacht (Embargo aus der Form-UI entfernt),
  geplante Termine in Europe/Berlin (Speicherung UTC, DISPLAY_TIMEZONE)
- Quota-Stub (users.press_release_quota) + monatlicher Reset-Command
- Einreichungs-Modal einheitlich in Show/Create/Edit; Ghost-Buttons auf
  filled; PM-Editor-Layout responsive entkoppelt (.pr-editor-layout)

KI-Pruef-Pipeline (Phasen 1-5 des Entwicklungsplans):
- API-Haertung: status nicht mehr per API setzbar, eigene Submit-Route
  durch denselben Funnel (Blacklist, Quota, Status-Log)
- Klassifikation Rot/Gelb/Gruen asynchron (Queue classification,
  OpenAI-Treiber + deterministischer Fallback), ki_audits-Audit-Log
- Routing: Rot -> rejected + Mail, Gelb -> Review-Queue, Gruen ->
  Auto-Publish; Scheduler publiziert nur gruene faellige PMs
- Content-Score 0-100 -> Stufe (Standard/Geprueft/Hochwertig) inkl.
  Editor-Panel und Badges; Re-Klassifikation/-Score bei Aenderung
- Admin: KI-Badge + Filter, On-Demand-Pruefung mit Anbieter-Override

Suite: 442 passed, 4 skipped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 08:30:13 +00:00

71 lines
2.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/*
|--------------------------------------------------------------------------
| KI-Prüfung & Scoring
|--------------------------------------------------------------------------
|
| Zentrale, ohne Code-Änderung kalibrierbare Schwellen und Verhaltens-Flags
| für die automatisierte Prüfung von Pressemitteilungen (Konzept §15).
|
| Phase 2 legt die Konfiguration an; die Werte werden ab Phase 3
| (Klassifikation) bzw. Phase 4 (Routing) wirksam.
|
*/
return [
/*
|--------------------------------------------------------------------------
| Klassifikation (Red Flag, §15.1)
|--------------------------------------------------------------------------
|
| Aktiver Anbieter und Modell für den Klassifikations-Gate. Die konkreten
| Treiber (anthropic|gemini|openai|deterministic) folgen in Phase 3.
|
*/
'classification' => [
// Aktiver Treiber: openai|deterministic (Anthropic/Gemini folgen).
// Fällt der Anbieter aus (kein Key, Timeout, Fehler), greift im Job
// automatisch der deterministische Treiber.
'provider' => env('CLASSIFICATION_PROVIDER', 'openai'),
// Optional ein abweichendes Modell; leer => config('services.openai.model').
'model' => env('CLASSIFICATION_MODEL'),
// Sekunden, bevor auf den deterministischen Fallback-Treiber
// ausgewichen wird (Timeout/Rate-Limit/Ausfall).
'timeout' => (int) env('CLASSIFICATION_TIMEOUT', 15),
// Verzögerung in Minuten für „grün" eingestufte PMs als
// Sicherheitsfenster vor der automatischen Veröffentlichung
// (Konzept-Option, 0 = sofort).
'green_delay_minutes' => (int) env('CLASSIFICATION_GREEN_DELAY', 0),
// Ob „gelb" eingestufte PMs in die manuelle Admin-Queue gehen.
'yellow_to_manual_queue' => (bool) env('CLASSIFICATION_YELLOW_MANUAL', true),
],
/*
|--------------------------------------------------------------------------
| Content-Score (Qualitätsbewertung, §15.2 / Update 2)
|--------------------------------------------------------------------------
|
| Anbieter/Modell für die Score-Berechnung und Schwellen für die Ableitung
| der Stufe aus dem 0100-Score (Standard < 60 ≤ Geprüft < 80 ≤ Hochwertig).
| Schwellen werden laut Konzept nach 100200 echten PMs kalibriert.
|
*/
'content_score' => [
'provider' => env('CONTENT_SCORE_PROVIDER', 'openai'),
'model' => env('CONTENT_SCORE_MODEL'),
'timeout' => (int) env('CONTENT_SCORE_TIMEOUT', 30),
'tiers' => [
'hochwertig' => (int) env('CONTENT_SCORE_HOCHWERTIG', 80),
'gepruft' => (int) env('CONTENT_SCORE_GEPRUEFT', 60),
// alles darunter => 'standard'
],
],
];