from typing import Any, Tuple def validate_submission(obj: Any) -> Tuple[bool, str]: if not isinstance(obj, list): return False, "Submission must be a JSON list of annotations." required_keys = {"image_id", "score", "category_id", "area", "bbox", "segmentation"} for i, ann in enumerate(obj): if not isinstance(ann, dict): return False, f"Annotation at index {i} must be an object/dict." missing = required_keys - set(ann.keys()) if missing: return False, f"Annotation at index {i} missing keys: {sorted(list(missing))}" if not isinstance(ann["image_id"], int): return False, f"image_id at index {i} must be an integer." if not isinstance(ann["category_id"], int): return False, f"category_id at index {i} must be an integer." if not isinstance(ann["score"], (int, float)): return False, f"score at index {i} must be a number." if not isinstance(ann["area"], (int, float)): return False, f"area at index {i} must be a number." bbox = ann["bbox"] if not (isinstance(bbox, list) and len(bbox) == 4 and all(isinstance(x, (int, float)) for x in bbox)): return False, f"bbox at index {i} must be a list of 4 numbers." if not isinstance(ann["segmentation"], list): return False, f"segmentation at index {i} must be a list." return True, "OK"