from typing import Any, Dict LIST_FIELDS = { "primary_entities", "secondary_entities", "visual_attributes", "style", "mood_emotion", "narrative_tone", "audio_intent", "audio_elements", "must_include", "must_avoid", } def normalize_plan_fields(data: Dict[str, Any]) -> Dict[str, Any]: """ Ensures all list-based semantic fields are lists, even if LLM returns a single string. """ for field in LIST_FIELDS: if field in data: value = data[field] if isinstance(value, str): data[field] = [value] elif value is None: data[field] = [] return data