Add phase 4: AI cleanup and photo/text import via OpenAI
- recipes/ai.py: Chat Completions with strict JSON schema (Structured Outputs), Pydantic re-validation, plausibility clamping, prompt treats input as data only - "Mit KI aufbereiten" on create/edit form returns an editable draft - Import page: photo/screenshot (vision, downscaled JPEG, not stored) and pasted text; drafts pre-fill the recipe form with a preview - Clear UI messages for timeout, rate limit, quota, auth, model and connection errors; without OPENAI_API_KEY AI features show a notice - Optional per-user and global daily AI limits (default unlimited) - Tests for response parsing, schema strictness, error mapping, views Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
9256e94286
commit
1bf8ef8b65
@@ -271,3 +271,12 @@ h3 { font-size: 1rem; margin: 1rem 0 0.25rem; color: var(--muted); }
|
||||
.checklist input:checked + span { opacity: 0.45; text-decoration: line-through; }
|
||||
.steps-big { font-size: 1.25rem; line-height: 1.55; }
|
||||
.step-no { font-weight: 700; color: var(--accent); }
|
||||
|
||||
/* --- Import & drafts ---------------------------------------------------------------- */
|
||||
.head-actions { display: flex; gap: 0.5rem; }
|
||||
.small { font-size: 0.85rem; }
|
||||
.draft-notice { margin-bottom: 1rem; }
|
||||
.preview summary { cursor: pointer; }
|
||||
.preview .ingredients .amount { flex-basis: 5.5rem; }
|
||||
button[disabled] { opacity: 0.6; cursor: progress; }
|
||||
code { font-size: 0.9em; }
|
||||
|
||||
Reference in New Issue
Block a user