ahmedyradwan02 commited on
Commit
2baab61
·
verified ·
1 Parent(s): 91c3d77

T4 review round v2: text-only explanations, 2 labels, saves to reviews/v2/

Browse files
data/config.json CHANGED
@@ -1,8 +1,9 @@
1
  {
2
  "dataset": "Deep-Fake/mozaic-t4-review",
 
3
  "reviewers": {
4
  "ahmedyradwan02": "alice",
5
  "shainaraza": "bob",
6
  "MohamedXI": "carol"
7
  }
8
- }
 
1
  {
2
  "dataset": "Deep-Fake/mozaic-t4-review",
3
+ "round": "v2",
4
  "reviewers": {
5
  "ahmedyradwan02": "alice",
6
  "shainaraza": "bob",
7
  "MohamedXI": "carol"
8
  }
9
+ }
data/reviews/golden_alice.json CHANGED
The diff for this file is too large to render. See raw diff
 
data/reviews/golden_bob.json CHANGED
The diff for this file is too large to render. See raw diff
 
data/reviews/golden_carol.json CHANGED
The diff for this file is too large to render. See raw diff
 
index.html CHANGED
@@ -58,10 +58,12 @@
58
  <p>Watch the clip, and the reference (the same person's real clip) to compare. The facts say
59
  what is fake; they are correct. Judge only what is written, per part:</p>
60
  <ul>
61
- <li><b>accurate</b>: it is there, in the region the facts name (for a REAL part: no fake
62
- artifact is claimed and none is obvious)</li>
63
- <li><b>ungrounded</b>: vague, generic, or in the wrong region or moment</li>
64
- <li><b>invented</b>: describes something that is not in the clip</li>
 
 
65
  </ul>
66
  <p>Every move saves in this browser; your file goes to Hugging Face at least once a minute.
67
  Close the tab any time: you resume at your first unfinished clip. Use one tab at a time.</p>
@@ -100,7 +102,7 @@
100
  import { oauthLoginUrl, oauthHandleRedirectIfPresent, downloadFile, uploadFile }
101
  from "https://cdn.jsdelivr.net/npm/@huggingface/hub@2.16.3/+esm";
102
 
103
- const LABELS = ["accurate", "ungrounded", "invented"];
104
  const PUSH_EVERY_MS = 60_000; // at most one commit a minute per reviewer
105
  const $ = (id) => document.getElementById(id);
106
  const esc = (s) => String(s ?? "").replace(/[&<>"]/g, (c) => ({"&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;"}[c]));
@@ -131,7 +133,7 @@ function signIn(text) {
131
  }
132
 
133
  // ---------------------------------------------------------------- load
134
- const file = () => `reviews/golden_${name}.json`;
135
  const repo = () => ({type: "dataset", name: config.dataset});
136
 
137
  function merge(...versions) {
@@ -161,7 +163,7 @@ async function start() {
161
  if (!name) return signIn(`${auth.user} is not on the reviewer list. Ask for your account to be added.`);
162
  try {
163
  const seed = await (await fetch(`data/reviews/golden_${name}.json`)).json();
164
- const local = store.get(`t4:work:${name}`);
165
  clips = merge(seed, await remote(), local);
166
  dirty = Boolean(local);
167
  } catch (e) {
@@ -185,7 +187,7 @@ function part(c, p) {
185
  return `<h3>${p[0].toUpperCase() + p.slice(1)}</h3>
186
  <div><b>Facts:</b> <span class="${fake ? "fake" : "real"}">${esc(c.facts[p])}</span></div>
187
  <p><b>Explanation:</b> ${esc(c.explanation[p])}</p>
188
- <div><b>Evidence</b> <span class="label">(artifact | where | when)</span></div><ul>${ev}</ul>
189
  <div class="label">${p} label</div><div class="choices">${radios}</div>`;
190
  }
191
 
@@ -212,7 +214,7 @@ function saveLocal() {
212
  const r = {video: picked("video"), audio: picked("audio"), note: $("note").value.trim()};
213
  if (r.video === c.review.video && r.audio === c.review.audio && r.note === (c.review.note || "")) return false;
214
  c.review = {...r, time: new Date().toISOString()};
215
- store.set(`t4:work:${name}`, clips);
216
  dirty = true;
217
  syncLabel();
218
  return true;
@@ -227,7 +229,7 @@ function push(now) {
227
  file: {path: file(), content: new Blob([JSON.stringify(clips, null, 1)])}});
228
  dirty = false;
229
  lastPush = Date.now();
230
- store.del(`t4:work:${name}`);
231
  } catch (e) {
232
  const text = String(e);
233
  if (text.includes("401") || text.includes("not found")) {
 
58
  <p>Watch the clip, and the reference (the same person's real clip) to compare. The facts say
59
  what is fake; they are correct. Judge only what is written, per part:</p>
60
  <ul>
61
+ <li><b>accurate</b>: everything written is true of the clip. Each flaw it describes (blur,
62
+ warping, less movement) is there; if it says nothing looks or sounds wrong, nothing
63
+ obvious is wrong; for a REAL part, nothing fake is claimed.</li>
64
+ <li><b>inaccurate</b>: something written is not true of the clip: a flaw it describes is
65
+ not there, or it says nothing looks or sounds wrong while a flaw is obvious. Say what in
66
+ the note.</li>
67
  </ul>
68
  <p>Every move saves in this browser; your file goes to Hugging Face at least once a minute.
69
  Close the tab any time: you resume at your first unfinished clip. Use one tab at a time.</p>
 
102
  import { oauthLoginUrl, oauthHandleRedirectIfPresent, downloadFile, uploadFile }
103
  from "https://cdn.jsdelivr.net/npm/@huggingface/hub@2.16.3/+esm";
104
 
105
+ const LABELS = ["accurate", "inaccurate"];
106
  const PUSH_EVERY_MS = 60_000; // at most one commit a minute per reviewer
107
  const $ = (id) => document.getElementById(id);
108
  const esc = (s) => String(s ?? "").replace(/[&<>"]/g, (c) => ({"&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;"}[c]));
 
133
  }
134
 
135
  // ---------------------------------------------------------------- load
136
+ const file = () => `reviews/${config.round}/golden_${name}.json`; // one folder per review round
137
  const repo = () => ({type: "dataset", name: config.dataset});
138
 
139
  function merge(...versions) {
 
163
  if (!name) return signIn(`${auth.user} is not on the reviewer list. Ask for your account to be added.`);
164
  try {
165
  const seed = await (await fetch(`data/reviews/golden_${name}.json`)).json();
166
+ const local = store.get(`t4:work:${config.round}:${name}`);
167
  clips = merge(seed, await remote(), local);
168
  dirty = Boolean(local);
169
  } catch (e) {
 
187
  return `<h3>${p[0].toUpperCase() + p.slice(1)}</h3>
188
  <div><b>Facts:</b> <span class="${fake ? "fake" : "real"}">${esc(c.facts[p])}</span></div>
189
  <p><b>Explanation:</b> ${esc(c.explanation[p])}</p>
190
+ <div><b>Evidence</b> <span class="label">(artifact | what it means)</span></div><ul>${ev}</ul>
191
  <div class="label">${p} label</div><div class="choices">${radios}</div>`;
192
  }
193
 
 
214
  const r = {video: picked("video"), audio: picked("audio"), note: $("note").value.trim()};
215
  if (r.video === c.review.video && r.audio === c.review.audio && r.note === (c.review.note || "")) return false;
216
  c.review = {...r, time: new Date().toISOString()};
217
+ store.set(`t4:work:${config.round}:${name}`, clips);
218
  dirty = true;
219
  syncLabel();
220
  return true;
 
229
  file: {path: file(), content: new Blob([JSON.stringify(clips, null, 1)])}});
230
  dirty = false;
231
  lastPush = Date.now();
232
+ store.del(`t4:work:${config.round}:${name}`);
233
  } catch (e) {
234
  const text = String(e);
235
  if (text.includes("401") || text.includes("not found")) {