Commit Graph
4 Commits
Author SHA1 Message Date
Kyle DammannandClaude Opus 5.5 dfa4813a42 Refine AI prompt for countable ingredients and units
Real calls produced "2 Stück Eier" and "1 Zehen Knoblauchzehe". The
prompt now asks for no unit on countable items and no unit repeated in
the name; verified with a real gpt-5-mini call.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30 22:19:25 +01:00
Kyle DammannandClaude Opus 5.5 2f73520150 Detect OpenAI "no credits" 429 as exhausted balance
A real API call returned 429 "You have no credits remaining" without the
word "quota", so the UI wrongly said the AI was busy. Match quota,
credit and billing wording; test uses the real message.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30 22:15:33 +01:00
Kyle DammannandClaude Opus 5.5 3b72436119 Add OPENAI_BASE_URL and end-to-end AI tests through the SDK
- Optional OPENAI_BASE_URL for OpenAI-compatible endpoints or proxies
- Tests run the real openai SDK against a local stub server: request
  shape (model, auth, strict json_schema), text cleanup, photo import
  and an authentication error mapped to the UI message

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30 22:06:35 +01:00
Kyle DammannandClaude Opus 5.5 1bf8ef8b65 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]>
2026-10-30 21:43:30 +01:00