9705a43b92
feat: cloud auth bypass, VRAM leasing, barcode EXIF fix, pipeline improvements
...
- cloud_session.py: CLOUD_AUTH_BYPASS_IPS with CIDR support; X-Real-IP for
Docker bridge NAT-aware client IP resolution; local-dev DB path under
CLOUD_DATA_ROOT for bypass sessions
- compose.cloud.yml: thread CLOUD_AUTH_BYPASS_IPS from shell env; document
Docker bridge CIDR requirement in .env.example
- nginx.cloud.conf + nginx.conf: client_max_body_size 20m for barcode uploads
- barcode_scanner.py: EXIF orientation correction (PIL ImageOps.exif_transpose)
before cv2 decode; rotation coverage extended to [90, 180, 270, 45, 135]
to catch sideways barcodes the 270° case was missing
- llm_recipe.py: CF-core VRAM lease acquire/release wrapping LLMRouter calls
- tasks/runner.py + config.py: COORDINATOR_URL + recipe_llm VRAM budget (4GB)
- recipes.py: per-request Store creation inside asyncio.to_thread worker to
avoid SQLite check_same_thread violations
- download_datasets.py: HF_PARQUET_FILES strategy for repos without dataset
builders (lishuyang/recipepairs direct parquet download)
- derive_substitutions.py: use recipepairs_recipes.parquet for ingredient
lookup; numpy array detection; JSON category parsing
- test_build_flavorgraph_index.py: rewritten for CSV-based index format
- pyproject.toml: add Pillow>=10.0 for EXIF rotation support
2026-04-01 16:06:23 -07:00
206b930aff
Merge branch 'feature/shared-task-scheduler'
2026-03-31 14:27:51 -07:00
a5c59674f2
feat: recipe engine Phase 3 — StyleAdapter, LLM levels 3-4, user settings
...
Task 13: StyleAdapter with 5 cuisine templates (Italian, Latin, East Asian,
Eastern European, Mediterranean). Each template includes weighted method_bias
(sums to 1.0), element-filtered aromatics/depth/structure helpers, and
seasoning/finishing-fat vectors. StyleTemplate is a fully immutable frozen
dataclass with tuple fields.
Task 14: LLMRecipeGenerator for Levels 3 and 4. Level 3 builds a structured
element-scaffold prompt; Level 4 generates a minimal wildcard prompt (<1500
chars). Allergy hard-exclusion wired through RecipeRequest.allergies into
both prompt builders and the generate() call path. Parsed LLM response
(title, ingredients, directions, notes) fully propagated to RecipeSuggestion.
Task 15: User settings key-value store. Migration 012 adds user_settings
table. Store.get_setting / set_setting with upsert. GET/PUT /settings/{key}
endpoints with Pydantic SettingBody, key allowlist, get_session dependency.
RecipeEngine reads cooking_equipment from settings when hard_day_mode=True.
55 tests passing.
2026-03-31 14:15:18 -07:00
b3c6099691
feat: StyleAdapter — 5 cuisine templates with element dimension biasing
2026-03-31 12:54:42 -07:00
4773465904
feat: recipe + staple API endpoints with tier gating
2026-03-31 12:49:38 -07:00
2233d55e25
feat: RecipeEngine Level 1-2 — grocery links + affiliate deeplink builder
...
Add GroceryLink schema model and grocery_links field to RecipeResult.
Introduce GroceryLinkBuilder service (Amazon Fresh, Walmart, Instacart)
using env-var affiliate tags; no links emitted when tags are absent.
Wire link builder into RecipeEngine.suggest() for levels 1-2.
Add test_grocery_links_free_tier to verify structure contract.
35 tests passing.
2026-03-31 12:23:07 -07:00
3a064bcac8
feat: RecipeEngine Level 1-2 — corpus match, substitution, grocery list, hard day mode
2026-03-31 11:50:28 -07:00
97e8889d89
feat: store — recipe search, rate-limit check, substitution feedback logging
2026-03-31 11:29:54 -07:00
a17dcc8c55
feat(tasks): add background task scheduler for LLM expiry fallback
...
Uses circuitforge_core.tasks.scheduler. VRAM detection via cf-orch when
available, falling back to unlimited. Adds expiry_llm_fallback task type
to background-predict expiry dates for items the LUT doesn't cover.
2026-03-31 09:25:48 -07:00
925d1eeacb
fix: test fixture — add protein_delta to substitution_pairs inserts
2026-03-30 23:16:15 -07:00
2ca76bddec
feat: SubstitutionEngine — deterministic swap candidates with compensation hints
2026-03-30 23:13:49 -07:00
ba6766b1d9
fix: staple library — consistent tofu_firm slug, load error handling, typed yield_formats, expanded test coverage
2026-03-30 23:10:51 -07:00
12ebd11092
fix: ElementClassifier — guard empty input, safe JSON decode, dedup heuristic elements, strengthen test assertions
2026-03-30 23:10:49 -07:00
421a52cb50
feat: ElementClassifier -- ingredient element tagging with heuristic fallback
2026-03-30 22:59:46 -07:00
67cfd70e92
feat: data pipeline -- recipe corpus + substitution pair derivation
2026-03-30 22:55:41 -07:00
7fd2cc75c4
feat: tiers -- leftover_mode rate-limited free, style_picker paid+, staple_library free
2026-03-30 22:50:35 -07:00
320657e61a
feat: data pipeline -- FlavorGraph molecule index builder
2026-03-30 22:46:53 -07:00
b1fa55c809
feat: data pipeline -- USDA FDC ingredient index builder
2026-03-30 22:44:25 -07:00