8.8 KiB
8.8 KiB
title
| title |
|---|
| AI Magic Edits (Ops Runbook) |
Dieses Runbook beschreibt den operativen Betrieb von AI Magic Edits (AI Styling) inklusive Entitlements, Provider-Betrieb, Monitoring, Recovery und Incident-Handling.
1. Scope und aktueller Stand
- Feature-Name im System:
ai_styling(User-facing: "AI Magic Edits"/"AI-Styling"). - Architektur ist provider-agnostisch umgesetzt (
AiImageProviderInterface), aktuell istrunware.aials erster Provider aktiv. - Das Guest-PWA-Rollout ist derzeit clientseitig hinter einem Flag deaktiviert:
resources/js/guest-v2/lib/featureFlags.ts→GUEST_AI_MAGIC_EDITS_ENABLED = false.
- Im Event Admin Control Room wird der AI-Bereich nur angezeigt, wenn das Event das Capability
ai_stylinghat.
2. Entitlements und Freischaltung
2.1 Paket-/Addon-Logik
- Erforderliches Paket-Feature:
ai_styling(config/ai-editing.php). - Standard-Addon-Key:
ai_styling_unlock(config/ai-editing.php,config/package-addons.php). - Entitlement wird event-spezifisch aufgelöst über:
- aktives Event-Paket (
eventPackage.package.features, Tabelleevent_packages) - aktive, abgeschlossene Addons (
eventPackage.addons, Tabelleevent_package_addons,status=completed, optionales Ablaufdatum inmetadata).
- aktives Event-Paket (
- Quelle der Berechtigung:
granted_by=package(Feature im Paket enthalten, z.B. Premium)granted_by=addon(Addon für Event aktiv)- sonst gesperrt (
feature_locked).
2.2 Superadmin-Konfiguration
- Paket-Feature-Verwaltung erfolgt über die bestehende Package-Resource (Feature
ai_stylingsetzen). - Addon-Katalog:
- Key
ai_styling_unlockinconfig/package-addons.php - kaufbar nur, wenn im Checkout-Katalog ein valider Preis hinterlegt ist.
- Key
3. Runtime-Steuerung (Superadmin)
Die zentrale Laufzeitsteuerung liegt in AI Editing Settings (Rare Admin Cluster):
is_enabled: Globaler Kill-Switch.status_message: Text bei globaler Deaktivierung (feature_disabled).default_provider: aktuellrunware.fallback_provider: reserviert für späteres Failover.runware_mode:liveoderfake.queue_auto_dispatch: automatische Queue-Dispatches direkt nach Request-Erstellung.queue_name: Ziel-Queue für AI Jobs.queue_max_polls: maximale Poll-Versuche für Provider-Status.blocked_terms: globale Prompt-Blockliste.
Wichtiger Betriebsaspekt:
- Standard ist
queue_auto_dispatch=false. In diesem Modus werden neue Requests zwar erstellt, aber nicht automatisch verarbeitet. - Für Live-Betrieb muss entweder
queue_auto_dispatch=truegesetzt oder ein separater Dispatch-Prozess etabliert sein.
4. Styles und Event-Policy
4.1 Globale Styles
- Verwaltung über
AI StylesResource. - Styles definieren u.a.:
provider/provider_modelprompt_template/negative_prompt_templateis_active,is_premium- optionales Entitlement-Metadatenprofil (
metadata.entitlements.*).
4.2 Event-spezifische Policy
Event-Settings unter settings.ai_editing unterstützen:
enabled(Feature pro Event an/aus)allow_custom_promptallowed_style_keys(leer = alle erlaubten Styles)policy_message(Rückmeldung bei Blockierung/Deaktivierung)
5. API/Queue-Verarbeitung
5.1 Endpunkte
- Guest:
POST /api/v1/events/{token}/photos/{photo}/ai-editsGET /api/v1/events/{token}/ai-edits/{requestId}GET /api/v1/events/{token}/ai-styles
- Tenant:
GET /api/v1/tenant/events/{eventSlug}/ai-editsGET /api/v1/tenant/events/{eventSlug}/ai-edits/summaryPOST /api/v1/tenant/events/{eventSlug}/ai-editsGET /api/v1/tenant/events/{eventSlug}/ai-edits/{aiEditRequest}GET /api/v1/tenant/events/{eventSlug}/ai-styles
5.2 Schutzschichten pro Request
Reihenfolge der Kernprüfungen:
- Global aktiviert (
is_enabled) - Entitlement vorhanden (Paket/Addon)
- Event-Policy erlaubt Request
- Budget erlaubt Request (Soft/Hard Cap)
- Style-Zulässigkeit
- Prompt-Safety (blocked terms)
- Queue/Provider-Verarbeitung
5.3 Queue-Jobs
ProcessAiEditRequest: Provider-Submit und ggf. Übergang in Polling.PollAiEditRequest: Provider-Statusabfrage bisqueue_max_polls.- Terminalstatus:
succeededfailedblocked
5.4 Output-Speicherung und Wasserzeichen
- Bei erfolgreichem Provider-Result versucht das Backend, den Output lokal zu persistieren:
- Download von
provider_url - Speicherung unter Event-Pfad (
events/{eventSlug}/ai-edits/...) - Watermark-Anwendung über dieselbe Logik wie normale Uploads (
WatermarkConfigResolver+ImageHelper).
- Download von
- Primäre Auslieferung erfolgt über lokale
storage_path/url;provider_urlbleibt als Fallback erhalten. - Backfill für Alt-Daten ohne lokale Pfade:
php artisan ai-edits:backfill-storage
6. Provider-Betrieb (Runware)
6.1 Erforderliche ENV/Config
RUNWARE_API_KEYRUNWARE_BASE_URL(Defaulthttps://api.runware.ai/v1)RUNWARE_TIMEOUT(Sekunden)AI_EDITING_DEFAULT_PROVIDER(Defaultrunware)AI_EDITING_RUNWARE_MODE(liveoderfake)
6.2 Fake-Mode
runware_mode=fakeliefert synthetische Antworten ohne externen API-Call.- Geeignet für interne Validierung von Flow/UI/Queue-Logik.
- Nicht für Kosten- oder Qualitätsaussagen nutzen.
7. Monitoring und Alerts
7.1 Wichtige Kennzahlen
- Request-Statusverteilung je Event (
queued,processing,succeeded,failed,blocked) - Failure-Rate
- Moderation-Hit-Rate
- Provider-Failure-Rate
- durchschnittliche Provider-Latenz
- Monatsausgaben (
ai_usage_ledgers)
Das Tenant-Summary-Endpoint liefert diese Daten inkl. Alert-Flags:
observability.alerts.failure_rate_threshold_reachedobservability.alerts.latency_threshold_reached
7.2 Schwellenwerte aus Config
ai-editing.observability.failure_rate_alert_threshold(Default0.35)ai-editing.observability.failure_rate_min_samples(Default10)ai-editing.observability.latency_warning_ms(Default15000)- Budget-Alert-Cooldown:
ai-editing.billing.budget.alert_cooldown_minutes(Default30) - Abuse-Eskalation:
ai-editing.abuse.escalation_threshold_per_hour(Default25)
7.3 Relevante Log-Signale
AI provider latency warningAI failure-rate alert threshold reachedAI budget threshold reachedAI abuse escalation threshold reached
8. Betriebs-Kommandos
8.1 Stuck Requests analysieren/recovern
- Dry-run:
php artisan ai-edits:recover-stuck --minutes=30
- Requeue:
php artisan ai-edits:recover-stuck --minutes=30 --requeue
- Hart auf failed setzen:
php artisan ai-edits:recover-stuck --minutes=30 --fail
8.2 Retention-Pruning
- Dry-run:
php artisan ai-edits:prune --pretend
- Ausführen (mit optionalen Overrides):
php artisan ai-edits:prune --request-days=90 --ledger-days=365
Retention Defaults:
- Requests:
AI_EDITING_REQUEST_RETENTION_DAYS(90) - Ledger:
AI_EDITING_USAGE_LEDGER_RETENTION_DAYS(365)
Hinweis:
ai-edits:pruneläuft täglich per Scheduler (02:30), kann aber bei Bedarf manuell ausgeführt werden.
8.3 Backfill lokaler AI-Outputs
- Dry-run:
php artisan ai-edits:backfill-storage --pretend
- Ausführen:
php artisan ai-edits:backfill-storage --limit=200
- Für einzelne Request-ID:
php artisan ai-edits:backfill-storage --request-id=123
9. Incident-Playbooks
9.1 Provider-Ausfall / hohe Failure-Rate
is_enabled=falseals Kill-Switch setzen (optional mitstatus_message).runware_mode=fakenur für interne Funktionstests aktivieren.- Queue-Backlog prüfen, ggf.
ai-edits:recover-stuck --requeuenach Stabilisierung. - Fehlerraten im Summary pro Event kontrollieren.
9.2 Kostenanstieg / Budget-Hard-Cap
- Budget-Alerts (
ai_budget_soft_cap/ai_budget_hard_cap) prüfen. - Tenant-Budget in
tenant.settings.ai_editing.budget.*validieren. - Bei Bedarf zeitweises Override
override_untilsetzen. - Bei Missbrauchsspitzen zusätzlich Abuse-Signale prüfen.
9.3 Safety-/Abuse-Spike
blocked_termsnachschärfen.- Event-Policy enger setzen (
allow_custom_prompt=false,allowed_style_keyseinschränken). - Warn-Logs mit
scope_hash,event_id,tenant_idkorrelieren.
10. Datenschutz und Datenhaltung
- Keine Secrets in Logs/Docs schreiben (
RUNWARE_API_KEY,.env). - Prompt-/Negativprompt-Inhalte liegen in
ai_edit_requests; mit PII vorsichtig umgehen. - Nur notwendige Aufbewahrungsdauer halten; Pruning regelmäßig durchführen.
- Keine Erweiterung der Retention ohne abgestimmte Privacy-Änderung.
11. Go-Live-Checkliste
- Paket-/Addon-Freischaltung verifiziert (
ai_styling,ai_styling_unlock). RUNWARE_API_KEYgesetzt und Provider-Erreichbarkeit geprüft.queue_auto_dispatch=trueund Worker auf korrekter Queue aktiv.- Budget-Limits und Alerting pro Tenant geprüft.
- Safety-Baseline (
blocked_terms) gesetzt. - Recovery- und Prune-Commands in Ops-Routine aufgenommen.