Image-Text-to-Text
PEFT
Safetensors
English
lora
diffusion-gemma
ui-testing
visual-regression
accessibility
custom-inference
conversational
Instructions to use Shelter/UI-testjev with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use Shelter/UI-testjev with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
Download core.py from Shelter/UI-testjev: direct link, hf CLI and curl.
- Browser
- Download file 5.81 kB
-
https://huggingface.co/Shelter/UI-testjev/resolve/main/core.py
- Command line
-
hf download hf://Shelter/UI-testjev/core.py
-
curl -L -o core.py https://huggingface.co/Shelter/UI-testjev/resolve/main/core.py
5.81 kB
| """Public prompts and deterministic answer-slot seeds for UI-TestJev inference.""" | |
| import hashlib | |
| import json | |
| from pathlib import Path | |
| MODEL_ID = "google/diffusiongemma-26B-A4B-it" | |
| MODEL_REVISION = "f7f5b7f5fa82ffc52addd066915886d497f5517b" | |
| SEED = 3407 | |
| ISSUES = { | |
| "text_clipping": "Required text glyphs are clipped.", | |
| "contrast": "Text violates the stated minimum contrast requirement.", | |
| "required_content": "Required visible content is missing.", | |
| "occlusion": "The specified target is obstructed.", | |
| "image_aspect": "An image's aspect ratio differs beyond the allowed tolerance.", | |
| "target_size": "A control violates the stated minimum rendered dimensions.", | |
| } | |
| SCRY_LABELS = ("Color/Background", "Extra Element", "Icon/Nav", "Image/Asset", | |
| "Missing Content", "Selected/Disabled State", "Separator", "Shape/Size", | |
| "Spacing/Layout", "Typography", "badimage", "other") | |
| FIELDS = { | |
| "requirement_check": ("requirement_type", "requirement", "reference_target", "viewport"), | |
| "regression_search": ("viewport",), | |
| "keyboard_access": ("target", "observed_keyboard_trace"), | |
| "known_ui_differences": (), | |
| } | |
| INSTRUCTIONS = { | |
| "requirement_check": "Check ONLY the specified target and the single stated requirement. A visible styling change is not automatically a failure. Pass when that requirement remains satisfied; ignore other elements and other requirement categories. If evidence cannot establish the requirement, select unknown. For a failure select only the violated requirement category.", | |
| "regression_search": "Find the newly introduced regression across the full screen relative to the approved reference. Required visible content must remain present; glyphs must not be clipped; image aspect ratios must stay within 3% of the reference; controls previously at least 24 by 24 CSS pixels must remain above that minimum; text meeting 4.5:1 contrast must keep meeting it. Minor opacity changes still meeting contrast, outlines, one-pixel shifts, and aspect changes within tolerance are allowed. Ignore unchanged pre-existing defects. Select pass if these contracts remain satisfied, unknown if evidence is insufficient, or the violated category. This benchmark contains at most one introduced violation category. Do not infer a location from any supplied answer options.", | |
| "keyboard_access": "Can keyboard users reach the specified control using Tab in one complete focus cycle? Use the observed trace if supplied. A screenshot alone does not establish reachability: select unknown when the trace is absent. Select pass if reachable, fail if unreachable in a complete cycle.", | |
| } | |
| def digest(path): | |
| h = hashlib.sha256() | |
| with open(path, "rb") as f: | |
| for b in iter(lambda: f.read(4 * 1024 * 1024), b""): | |
| h.update(b) | |
| return h.hexdigest() | |
| def stable_seed(*values): | |
| return int(hashlib.sha256(json.dumps(values, sort_keys=True).encode()).hexdigest()[:15], 16) | |
| def options(task, public=None): | |
| if task == "keyboard_access": | |
| return [("pass", "Reachable"), ("fail", "Unreachable"), ("unknown", "Insufficient evidence")] | |
| if task == "requirement_check" and public and "requirement_type" in public: | |
| category = public["requirement_type"] | |
| if category not in ISSUES: raise ValueError("Unsupported public requirement type") | |
| return [("pass", "Stated requirement remains satisfied"), ("unknown", "Insufficient evidence"), (category, ISSUES[category])] | |
| issues = [k for k in ISSUES if task != "regression_search" or k != "occlusion"] | |
| return [("pass", "No violation of the checked contracts"), ("unknown", "Insufficient evidence")] + [(k, ISSUES[k]) for k in issues] | |
| def prompt_spec(public): | |
| """Only a public input is accepted. IDs/paths/provenance/targets never enter text.""" | |
| task = public["task"] | |
| state = {k: public[k] for k in FIELDS[task] if k in public} | |
| state["image_order"] = [dict(index=i+1, role=im["role"], **({"full_image_crop_xyxy": im["full_image_crop_xyxy"]} if "full_image_crop_xyxy" in im else {})) for i, im in enumerate(public["images"])] | |
| if task == "known_ui_differences": | |
| questions = [{"instruction": f"Is there a visible difference between the reference and implementation screens in category {tag!r}? Answer yes, no, or unknown. Images may have different dimensions.", "tag": tag, | |
| "options": [("yes", "Visible difference in this category"), ("no", "No visible difference in this category"), ("unknown", "Insufficient evidence")]} for tag in SCRY_LABELS] | |
| else: | |
| opts = options(task, public) | |
| questions = [{"instruction": INSTRUCTIONS[task], "options": opts}] | |
| system = "Answer a fixed set of questions about the supplied UI evidence. Each question lists its allowed answers. Reply with exactly one letter per question.\n" | |
| for i, q in enumerate(questions): | |
| system += f"\nQuestion q{i+1}: {q['instruction']}\n" | |
| for j, (name, description) in enumerate(q["options"]): | |
| system += f" {chr(65+j)}: {name} ({description})\n" | |
| system += "\nReply as lines in the form q1: A, q2: B, using only the allowed letters." | |
| return {"system": system, "state": json.dumps(state, ensure_ascii=False, sort_keys=True, separators=(",", ":")), "questions": questions} | |
| def public_identity(public, root): | |
| """Hash actual public prompt + ordered image bytes. No ID, label, path or oracle.""" | |
| spec = prompt_spec(public) | |
| content = [spec["system"], json.loads(spec["state"]), | |
| [digest(Path(root)/im["path"]) for im in public["images"]]] | |
| return hashlib.sha256(json.dumps(content, sort_keys=True, ensure_ascii=False).encode()).hexdigest() | |