innercontext/backend/alembic/versions
Piotr Oleszczyk 2a9391ad32 feat(api): add LLM response validation and input sanitization
Implement Phase 1: Safety & Validation for all LLM-based suggestion engines.

- Add input sanitization module to prevent prompt injection attacks
- Implement 5 comprehensive validators (routine, batch, shopping, product parse, photo)
- Add 10+ critical safety checks (retinoid+acid conflicts, barrier compatibility, etc.)
- Integrate validation into all 5 API endpoints (routines, products, skincare)
- Add validation fields to ai_call_logs table (validation_errors, validation_warnings, auto_fixed)
- Create database migration for validation fields
- Add comprehensive test suite (9/9 tests passing, 88% coverage on validators)

Safety improvements:
- Blocks retinoid + acid conflicts in same routine/day
- Rejects unknown product IDs
- Enforces min_interval_hours rules
- Protects compromised skin barriers
- Prevents prohibited fields (dose, amount) in responses
- Validates all enum values and score ranges

All validation failures are logged and responses are rejected with HTTP 502.
2026-03-06 10:16:47 +01:00
..
1f7e3b9c4a2d_add_user_profile_table.py feat(profile): add profile settings and LLM user context 2026-03-05 15:57:21 +01:00
7c91e4b2af38_replace_price_tier_with_objective_price_fields.py feat(products): compute price tiers from objective price/use 2026-03-04 14:47:18 +01:00
8e4c1b7a9d2f_drop_usage_notes_and_contraindications_from_products.py refactor(products): remove usage notes and contraindications fields 2026-03-05 10:11:24 +01:00
60c8e1ade29d_add_validation_fields_to_ai_call_logs.py feat(api): add LLM response validation and input sanitization 2026-03-06 10:16:47 +01:00
a1b2c3d4e5f6_add_ai_call_logs.py feat(routines): add minoxidil beard/mustache option to routine suggestions 2026-03-01 19:46:07 +01:00
b2c3d4e5f6a1_add_finish_reason_to_ai_call_logs.py fix(llm): log and handle non-STOP finish_reason from Gemini 2026-03-01 20:08:22 +01:00
c2d626a2b36c_initial_schema.py fix(backend): apply black/isort formatting and fix ruff noqa annotations 2026-03-01 17:27:07 +01:00
d3e4f5a6b7c8_add_tool_trace_to_ai_call_logs.py feat(api): add INCI tool-calling with normalized tool traces 2026-03-04 11:35:19 +01:00
e4f5a6b7c8d9_drop_product_interaction_columns.py refactor(products): remove obsolete interaction fields across stack 2026-03-04 12:42:12 +01:00
f1a2b3c4d5e6_add_async_pricing_jobs_and_snapshot_fields.py fix(backend): create pricetier enum before migration 2026-03-04 23:16:55 +01:00