ai_qc/backend/profiles
nickviljoen 71bb9a6295 fix(hp_copy_review): correct llm casing + route HP reports to /hp/ folder
Two bugs surfaced by the first dev smoke test:

1. Profile JSON declared "llm": "gemini" (lowercase). llm_config's
   dispatcher compares model_name == "Gemini" case-sensitively
   (matches the rest of the codebase), so the check fell through to
   "Invalid model selected" and never reached the API. Every other
   profile uses "Gemini" with capital G. Spec mistake — fixed.

2. get_client_from_profile() resolves the per-report output folder
   from the profile_id via hardcoded prefix matches. No 'hp_' branch
   existed, so hp_copy_review reports landed under output-dev/general/
   instead of output-dev/hp/ — the UI then couldn't find them. Added
   'hp_' → 'hp' alongside the existing mappings.

The check itself works correctly otherwise: profile_source was
user_selected, brand resolved to 'hp', and the reference asset was
successfully attached. Bug 1 just prevented Gemini from being called.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 22:07:25 +02:00
..
amazon_static.json Add periodic auth session check and rename Amazon Box Placement to Element Placement 2026-04-02 10:01:27 +02:00
axa_accessibility.json Split AXA accessibility check into its own profile 2026-05-10 11:15:46 +02:00
axa_policy_document.json Split AXA accessibility check into its own profile 2026-05-10 11:15:46 +02:00
axa_policy_document_diff.json Add AXA document-mode QC pipeline (Phases 1, 3, 4, 5) 2026-05-01 18:38:14 +02:00
boots_ppack.json Add Boots Production Pack profile (multi-page document mode) 2026-05-05 12:47:13 +02:00
boots_static.json Add Boots client QC profile with 5 compliance checks and split CLAUDE.md client docs 2026-04-13 09:25:58 +02:00
diageo_key_visual.json Create frontend and backend folder structure for deployment 2025-11-06 11:55:53 +02:00
diageo_packaging.json Create frontend and backend folder structure for deployment 2025-11-06 11:55:53 +02:00
general_check.json Create frontend and backend folder structure for deployment 2025-11-06 11:55:53 +02:00
hp_copy_review.json fix(hp_copy_review): correct llm casing + route HP reports to /hp/ folder 2026-05-17 22:07:25 +02:00
inclusive_accessibility.json Create frontend and backend folder structure for deployment 2025-11-06 11:55:53 +02:00
loreal_static.json Add dedicated text_product_overlap check for L'Oreal profile 2026-04-09 10:46:13 +02:00
README.md Create frontend and backend folder structure for deployment 2025-11-06 11:55:53 +02:00
static_general.json Create digital-focused general check modules and update Static General profile 2026-02-02 11:55:23 +02:00
unilever_key_visual.json Create frontend and backend folder structure for deployment 2025-11-06 11:55:53 +02:00
unilever_packaging.json Create frontend and backend folder structure for deployment 2025-11-06 11:55:53 +02:00
video_general.json Add Honda client, video QC, session refresh, Amazon check tuning 2026-04-16 14:53:52 +02:00

Visual AI QC Profiles

This directory contains JSON profile configurations for the Visual AI QC application. Profiles determine which QC checks are run, their weights, and which LLM (OpenAI or Gemini) is used for each check.

Profile Structure

Each profile is defined in its own JSON file with the following structure:

{
    "name": "Profile Name",
    "description": "Description of the profile and its purpose",
    "checks": {
        "check_name_1": {
            "weight": 0.10,
            "llm": "OpenAI",
            "enabled": true
        },
        "check_name_2": {
            "weight": 0.15,
            "llm": "Gemini",
            "enabled": true
        }
        // Add more checks as needed
    }
}

Fields Explanation

  • name: The display name of the profile (shown in the UI)
  • description: A short description explaining the profile's purpose
  • checks: A dictionary of QC checks to include in this profile
    • Each check entry contains:
      • weight: The weight of this check in the overall score (between 0 and 1, sum of all weights should equal 1)
      • llm: The LLM to use for this check ("OpenAI" or "Gemini")
      • enabled: Whether this check is enabled (true/false)

Adding New Profiles

To add a new profile:

  1. Create a new JSON file in this directory (e.g., my_brand.json)
  2. Define the profile structure following the format above
  3. Include only the checks relevant to your profile
  4. Ensure the sum of weights equals 1.0 (100%)
  5. Restart the application to load the new profile

The profile ID will be the filename without the .json extension. For example, my_brand.json will create a profile with ID my_brand.

Available QC Checks

Here are the available QC checks you can include in your profiles:

Visual Design Checks

  • logo_visibility: Checks if the logo is clearly visible
  • brand_assets_visibility: Checks if brand assets are prominent
  • visual_elements_count: Counts and evaluates visual elements
  • background_contrast: Evaluates contrast between foreground and background
  • face_visibility: Checks if faces are clearly visible
  • visual_hierarchy: Analyzes the visual hierarchy
  • supporting_images: Evaluates supporting imagery
  • curved_edges: Checks for curved edges in design
  • product_visibility: Checks if product is clearly visible

Text & Copy Checks

  • lowercase_text: Checks text casing
  • call_to_action: Evaluates call to action text
  • word_count: Checks word count
  • imperative_verb: Checks for imperative verbs
  • text_readability: Evaluates text readability

Layout & Composition Checks

  • new_visibility: Checks if "NEW" tag is prominently displayed
  • visuals_left_text_right: Checks layout for visuals on left, text on right
  • face_gaze_direction: Checks direction of faces gazing
  • element_alignment: Checks alignment of elements
  • aspect_ratio: Verifies correct aspect ratio
  • responsiveness: Tests responsiveness for different screens

Technical Checks

  • file_naming: Checks file naming conventions
  • layer_organization: Validates layer organization
  • color_format: Checks color format compliance
  • image_resolution: Verifies image resolution
  • safety_area: Checks safety areas/margins
  • print_bleed: Verifies print bleed areas
  • crop_marks: Checks crop marks
  • animation_transitions: Evaluates animation transitions
  • dark_mode_legibility: Tests legibility in dark mode

Example Profile

Here's an example profile for a brand that focuses on product visibility and call to action:

{
    "name": "Product Marketing",
    "description": "Profile optimized for product marketing materials",
    "checks": {
        "product_visibility": {
            "weight": 0.30,
            "llm": "OpenAI",
            "enabled": true
        },
        "call_to_action": {
            "weight": 0.20,
            "llm": "OpenAI",
            "enabled": true
        },
        "brand_assets_visibility": {
            "weight": 0.15,
            "llm": "OpenAI",
            "enabled": true
        },
        "background_contrast": {
            "weight": 0.10,
            "llm": "Gemini",
            "enabled": true
        },
        "visual_hierarchy": {
            "weight": 0.15,
            "llm": "OpenAI",
            "enabled": true
        },
        "image_resolution": {
            "weight": 0.10,
            "llm": "Gemini",
            "enabled": true
        }
    }
}

Default Profiles

The system includes these default profiles:

  1. default.json - All checks enabled with equal weighting
  2. diageo.json - Diageo brand guidelines
  3. unilever.json - Unilever brand guidelines
  4. general.json - General technical checks