shainaraza commited on
Commit
264e8fb
·
verified ·
1 Parent(s): b454846

Upload folder using huggingface_hub

Browse files
.gitattributes CHANGED
@@ -33,3 +33,9 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ clips/FVRA__animate__77f__main__id07839__QTWWQBdhWY_00029__id07683.mp4 filter=lfs diff=lfs merge=lfs -text
37
+ clips/FVRA__s2v__77f__main__id08406_qr5lYg7ej40_00213__id05444.mp4 filter=lfs diff=lfs merge=lfs -text
38
+ clips/RVFA__seed_vc__153f__main__id00460_KCBOXmDu5Ks_00025__id08352.mp4 filter=lfs diff=lfs merge=lfs -text
39
+ clips/RVRA__real__77f__main__id05877_6QUcq_6B-LU_00011__id07768.mp4 filter=lfs diff=lfs merge=lfs -text
40
+ clips/RVRA__real__77f__main__id05877_q_ZAQf6KfTQ_00093__id05564.mp4 filter=lfs diff=lfs merge=lfs -text
41
+ clips/RVRA__real__77f__main__id07839_gJgj1DxOfKA_00045__id07786.mp4 filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,10 +1,21 @@
1
  ---
2
- title: Mozaic Sample Explorer
3
- emoji: 💻
4
  colorFrom: indigo
5
- colorTo: pink
6
  sdk: static
 
7
  pinned: false
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: MOZAIC Sample Explorer
3
+ emoji: 🎭
4
  colorFrom: indigo
5
+ colorTo: gray
6
  sdk: static
7
+ app_file: index.html
8
  pinned: false
9
+ short_description: Gemini zero-shot answers on MOZAIC deepfake samples
10
  ---
11
 
12
+ # MOZAIC sample explorer
13
+
14
+ A small pilot from MOZAIC, an audio-visual deepfake benchmark built on VoxCeleb2
15
+ (code: https://github.com/VectorInstitute/mozaic). It shows Gemini's zero-shot answers on
16
+ example questions from each task (T1 spot the fake, T2 manipulation type, T3 same person,
17
+ T3.5 real same person), with the clips, the correct answers and the pilot-run scores.
18
+
19
+ Clips are copied from the MOZAIC release unchanged (video stream untouched; audio
20
+ re-encoded to AAC so browsers can play it). Fake clips are synthetic media made for
21
+ detection research. The pilot is far too small for conclusions.
clips/FVRA__animate__77f__main__id07839__QTWWQBdhWY_00029__id07683.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fb541e2410de06410bcd71789b65c745ba1b36abc98305252bb25630c731f405
3
+ size 107958
clips/FVRA__s2v__77f__main__id08406_qr5lYg7ej40_00213__id05444.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:11a10bd416821b8601bfaebfc9fec4d7c1deb0e480874a4f5470605b111a0baf
3
+ size 119994
clips/RVFA__seed_vc__153f__main__id00460_KCBOXmDu5Ks_00025__id08352.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:42ce21a3fa99eaa074a33dab7c90129065c8466a01a5ba46f1fcc019a37dd7bb
3
+ size 260939
clips/RVRA__real__77f__main__id05877_6QUcq_6B-LU_00011__id07768.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:175f6a038574049752362c47d6f9cac10be0eb0633155529e0d2b44453a92f3a
3
+ size 128751
clips/RVRA__real__77f__main__id05877_q_ZAQf6KfTQ_00093__id05564.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d20f676dd5ce8f1339b5687fdcbf0d1dff4b9f62e35ea0820c3b5d1ad984c3da
3
+ size 135135
clips/RVRA__real__77f__main__id07839_gJgj1DxOfKA_00045__id07786.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:51819f6865267482967c0b79c5e42203166c3b24c138f881961093c9674fb25f
3
+ size 135567
index.html CHANGED
@@ -1,19 +1,172 @@
1
  <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  </html>
 
1
  <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>MOZAIC Sample Explorer</title>
7
+ <style>
8
+ :root {
9
+ --bg: #f7f7f8; --card: #ffffff; --text: #1b1c1f; --muted: #62656e; --line: #e2e3e7;
10
+ --accent: #4f46e5; --ok: #15803d; --bad: #b91c1c; --code: #f0f0f3;
11
+ }
12
+ @media (prefers-color-scheme: dark) {
13
+ :root:not([data-theme="light"]) {
14
+ --bg: #111214; --card: #1a1b1f; --text: #ececf0; --muted: #a0a3ad; --line: #2c2e34;
15
+ --accent: #8b85ff; --ok: #4ade80; --bad: #f87171; --code: #24262c;
16
+ }
17
+ }
18
+ :root[data-theme="dark"] {
19
+ --bg: #111214; --card: #1a1b1f; --text: #ececf0; --muted: #a0a3ad; --line: #2c2e34;
20
+ --accent: #8b85ff; --ok: #4ade80; --bad: #f87171; --code: #24262c;
21
+ }
22
+ * { box-sizing: border-box; }
23
+ body { margin: 0; background: var(--bg); color: var(--text);
24
+ font: 15px/1.55 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
25
+ main { max-width: 1040px; margin: 0 auto; padding: 28px 16px 48px; }
26
+ h1 { font-size: 1.7rem; margin: 0 0 6px; }
27
+ .lede { color: var(--muted); margin: 0 0 4px; }
28
+ .fine { color: var(--muted); font-size: .82rem; margin: 0 0 20px; }
29
+ code { background: var(--code); padding: 1px 6px; border-radius: 5px; font-size: .88em; }
30
+ .tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--line); margin-bottom: 18px; overflow-x: auto; }
31
+ .tabs button { background: none; border: 0; border-bottom: 2px solid transparent; color: var(--muted);
32
+ padding: 9px 12px; font: inherit; cursor: pointer; white-space: nowrap; }
33
+ .tabs button[aria-selected="true"] { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }
34
+ .task-q { font-weight: 600; margin: 0; }
35
+ .task-in { color: var(--muted); margin: 2px 0 14px; }
36
+ .note { color: var(--muted); font-size: .82rem; margin: 0 0 6px; }
37
+ .stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-bottom: 18px; }
38
+ .stat { background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; }
39
+ .stat b { display: block; font-size: 1.45rem; font-variant-numeric: tabular-nums; }
40
+ .stat span { color: var(--muted); font-size: .82rem; }
41
+ .nav { display: flex; gap: 8px; align-items: center; margin-bottom: 14px; }
42
+ .nav select { flex: 1; min-width: 0; padding: 8px 10px; border-radius: 8px; border: 1px solid var(--line);
43
+ background: var(--card); color: var(--text); font: inherit; }
44
+ .nav button { padding: 8px 14px; border-radius: 8px; border: 1px solid var(--line); background: var(--card);
45
+ color: var(--text); font: inherit; cursor: pointer; }
46
+ .clips { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 12px; margin-bottom: 16px; }
47
+ figure { margin: 0; background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 10px; }
48
+ figure video { width: 100%; max-height: 320px; background: #000; border-radius: 6px; display: block; }
49
+ figcaption { color: var(--muted); font-size: .84rem; margin-top: 6px; }
50
+ .grid { display: grid; grid-template-columns: 3fr 2fr; gap: 16px; }
51
+ .card { background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 14px 16px; }
52
+ .card h3 { font-size: .8rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); margin: 0 0 6px; }
53
+ blockquote { margin: 0 0 12px; padding-left: 12px; border-left: 3px solid var(--line); }
54
+ table { border-collapse: collapse; width: 100%; margin-top: 10px; }
55
+ th, td { text-align: left; padding: 7px 8px; border-bottom: 1px solid var(--line); }
56
+ th { color: var(--muted); font-weight: 500; font-size: .85rem; }
57
+ .ok { color: var(--ok); font-weight: 600; } .bad { color: var(--bad); font-weight: 600; }
58
+ details { margin-top: 14px; } summary { cursor: pointer; color: var(--muted); }
59
+ pre { background: var(--code); padding: 10px; border-radius: 8px; overflow-x: auto; font-size: .85rem; }
60
+ ul { margin: 0; padding-left: 18px; }
61
+ @media (max-width: 680px) {
62
+ .stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
63
+ .grid { grid-template-columns: 1fr; }
64
+ }
65
+ </style>
66
+ </head>
67
+ <body>
68
+ <main>
69
+ <h1>MOZAIC sample explorer</h1>
70
+ <p class="lede">MOZAIC is an audio-visual deepfake benchmark built on VoxCeleb2. Every clip pairs a real or fake face
71
+ with a real or fake voice. This page shows a small pilot: <code id="model">…</code> answering MOZAIC questions
72
+ zero-shot, with example clips per task.</p>
73
+ <p class="fine">Research demo. Fake clips are synthetic media made for detection research; they do not show anything
74
+ the people in them said or did. A pilot this small is far too few for conclusions.</p>
75
+ <div class="tabs" role="tablist" id="tabs"></div>
76
+ <section id="panel"></section>
77
+ </main>
78
+ <script>
79
+ const TASKS = {
80
+ t1: ["T1 · Spot the fake", "Which part is fake: the video, the audio, both, or neither?",
81
+ "The model saw 32 frames and heard the audio."],
82
+ t2: ["T2 · Manipulation type", "How was the video made?", "The model saw 32 frames only, no sound."],
83
+ t3: ["T3 · Same person", "Is the face (or voice) in clip 1 the same person as in clip 2?",
84
+ "Face questions: frames of both clips, no sound. Voice questions: sound of both clips, no frames."],
85
+ t3_5: ["T3.5 · Real same person", "Is clip 1 a real recording of clip 2's person?",
86
+ "Face questions: frames of both clips, no sound. Voice questions: sound of both clips, no frames."],
87
+ };
88
+ const LABELS = { RVRA: "real video · real audio", RVFA: "real video · fake audio",
89
+ FVRA: "fake video · real audio", FVFA: "fake video · fake audio" };
90
+ const METHODS = { real: "camera (real)", facefusion: "FaceFusion face swap", s2v: "Wan2.2-S2V (audio-driven)",
91
+ animate: "Wan2.2-Animate (video-driven)", seed_vc: "Seed-VC voice conversion" };
92
+ const esc = s => String(s ?? "").replace(/[&<>"']/g, c => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" }[c]));
93
+
94
+ function clipDesc(clip) {
95
+ const [label, method, frames, arm] = clip.split("__");
96
+ const parts = [LABELS[label] || label, METHODS[method] || method, frames.replace("f", " frames")];
97
+ if (arm !== "main") parts.push(`${arm} audio`);
98
+ return parts.join(" · ");
99
+ }
100
+
101
+ let DATA, current = { task: null, i: 0 };
102
+
103
+ function renderTabs() {
104
+ const tabs = document.getElementById("tabs");
105
+ tabs.innerHTML = "";
106
+ for (const [key, [title]] of Object.entries(TASKS)) {
107
+ if (!DATA.tasks[key] || !DATA.tasks[key].items.length) continue;
108
+ const b = document.createElement("button");
109
+ b.role = "tab"; b.textContent = title;
110
+ b.setAttribute("aria-selected", key === current.task);
111
+ b.onclick = () => { current = { task: key, i: 0 }; renderTabs(); renderPanel(); };
112
+ tabs.appendChild(b);
113
+ }
114
+ }
115
+
116
+ function renderPanel() {
117
+ const key = current.task, task = DATA.tasks[key], s = task.scores, it = task.items[current.i];
118
+ const [, question, inputs] = TASKS[key];
119
+ const right = Math.round(s.accuracy * s.n);
120
+ const opts = task.items.map((x, i) =>
121
+ `<option value="${i}" ${i === current.i ? "selected" : ""}>${x.correct ? "✓" : "✗"} #${i + 1}${x.part ? ` [${x.part}]` : ""} ${esc(clipDesc(x.clips[0]))}</option>`).join("");
122
+ const clips = it.clips.map((c, n) => `
123
+ <figure><video controls preload="metadata" playsinline src="clips/${encodeURIComponent(c)}"></video>
124
+ <figcaption>Clip ${n + 1}${it.clips.length > 1 && n === 1 ? " (real reference)" : ""}</figcaption></figure>`).join("");
125
+ document.getElementById("panel").innerHTML = `
126
+ <p class="task-q">${esc(question)}</p>
127
+ <p class="task-in">${esc(inputs)}</p>
128
+ <p class="note">Scores over all ${s.n} questions Gemini answered in this pilot run; ${task.items.length} shown below.</p>
129
+ <div class="stats">
130
+ <div class="stat"><b>${right}/${s.n}</b><span>correct</span></div>
131
+ <div class="stat"><b>${s.accuracy.toFixed(2)}</b><span>accuracy (95% CI ${s.ci95[0].toFixed(2)}–${s.ci95[1].toFixed(2)})</span></div>
132
+ <div class="stat"><b>${s.balanced_accuracy.toFixed(2)}</b><span>balanced accuracy</span></div>
133
+ <div class="stat"><b>${s.cohen_kappa.toFixed(2)}</b><span>Cohen's κ</span></div>
134
+ </div>
135
+ <div class="nav">
136
+ <button id="prev" aria-label="Previous sample">◀</button>
137
+ <select id="pick" aria-label="Sample">${opts}</select>
138
+ <button id="next" aria-label="Next sample">▶</button>
139
+ </div>
140
+ <div class="clips">${clips}</div>
141
+ <div class="grid">
142
+ <div class="card">
143
+ <h3>Question</h3>
144
+ <blockquote>${esc(it.question)}</blockquote>
145
+ <div>Options, in the order shown: ${it.options.map(o => `<code>${esc(o)}</code>`).join(" · ")}</div>
146
+ <table>
147
+ <tr><th>Correct answer</th><th>Gemini answered</th><th></th></tr>
148
+ <tr><td><b>${esc(it.gt_answer)}</b></td><td><b>${esc(it.pred_answer ?? "— unreadable —")}</b></td>
149
+ <td class="${it.correct ? "ok" : "bad"}">${it.correct ? "✓ Correct" : "✗ Wrong"}</td></tr>
150
+ </table>
151
+ </div>
152
+ <div class="card">
153
+ <h3>About the clip(s), hidden from the model</h3>
154
+ <ul>${it.clips.map((c, n) => `<li><b>Clip ${n + 1}:</b> ${esc(clipDesc(c))}</li>`).join("")}</ul>
155
+ <details><summary>Gemini's raw reply</summary><pre>${esc((it.raw || "").trim())}</pre></details>
156
+ </div>
157
+ </div>`;
158
+ const go = d => { current.i = (current.i + d + task.items.length) % task.items.length; renderPanel(); };
159
+ document.getElementById("prev").onclick = () => go(-1);
160
+ document.getElementById("next").onclick = () => go(1);
161
+ document.getElementById("pick").onchange = e => { current.i = +e.target.value; renderPanel(); };
162
+ }
163
+
164
+ fetch("samples.json").then(r => r.json()).then(d => {
165
+ DATA = d;
166
+ document.getElementById("model").textContent = d.model;
167
+ current.task = Object.keys(TASKS).find(k => d.tasks[k] && d.tasks[k].items.length);
168
+ renderTabs(); renderPanel();
169
+ }).catch(e => { document.getElementById("panel").textContent = "Could not load samples.json: " + e; });
170
+ </script>
171
+ </body>
172
  </html>
samples.json ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": "gemini-3.8-flash",
3
+ "experiment": "shaina_fresh_test",
4
+ "tasks": {
5
+ "t1": {
6
+ "scores": {
7
+ "n": 10,
8
+ "accuracy": 0.2,
9
+ "ci95": [
10
+ 0.0567,
11
+ 0.5098
12
+ ],
13
+ "balanced_accuracy": 0.1875,
14
+ "cohen_kappa": -0.0256
15
+ },
16
+ "items": [
17
+ {
18
+ "id": "t1_RVFA__seed_vc__153f__main__id00460_KCBOXmDu5Ks_00025__id08352",
19
+ "clips": [
20
+ "RVFA__seed_vc__153f__main__id00460_KCBOXmDu5Ks_00025__id08352.mp4"
21
+ ],
22
+ "part": null,
23
+ "question": "Which part of this audio-visual clip, if any, is AI-generated or manipulated? A real recording that was only processed, without changing who is seen or heard, still counts as real.",
24
+ "options": [
25
+ "neither",
26
+ "both",
27
+ "the video",
28
+ "the audio"
29
+ ],
30
+ "gt_answer": "the audio",
31
+ "pred_answer": "neither",
32
+ "correct": false,
33
+ "raw": "```json\n{\"answer\": \"neither\"}\n```"
34
+ }
35
+ ]
36
+ },
37
+ "t2": {
38
+ "scores": {
39
+ "n": 10,
40
+ "accuracy": 0.5,
41
+ "ci95": [
42
+ 0.2366,
43
+ 0.7634
44
+ ],
45
+ "balanced_accuracy": 0.5,
46
+ "cohen_kappa": 0.3333
47
+ },
48
+ "items": [
49
+ {
50
+ "id": "t2_FVRA__s2v__77f__main__id08406_qr5lYg7ej40_00213__id05444",
51
+ "clips": [
52
+ "FVRA__s2v__77f__main__id08406_qr5lYg7ej40_00213__id05444.mp4"
53
+ ],
54
+ "part": null,
55
+ "question": "How was the video in this clip made? This question is only about the video (what you see), not the sound. Normal processing such as brightness, colour or compression does not count.",
56
+ "options": [
57
+ "video-driven animation",
58
+ "audio-driven animation",
59
+ "real",
60
+ "face swap"
61
+ ],
62
+ "gt_answer": "audio-driven animation",
63
+ "pred_answer": "video-driven animation",
64
+ "correct": false,
65
+ "raw": "{\"answer\": \"video-driven animation\"}"
66
+ }
67
+ ]
68
+ },
69
+ "t3": {
70
+ "scores": {
71
+ "n": 10,
72
+ "accuracy": 0.7,
73
+ "ci95": [
74
+ 0.3968,
75
+ 0.8922
76
+ ],
77
+ "balanced_accuracy": 0.7084,
78
+ "cohen_kappa": 0.4
79
+ },
80
+ "items": [
81
+ {
82
+ "id": "t3_face_A_FVRA__animate__77f__main__id07839__QTWWQBdhWY_00029__id07683",
83
+ "clips": [
84
+ "FVRA__animate__77f__main__id07839__QTWWQBdhWY_00029__id07683.mp4",
85
+ "RVRA__real__77f__main__id07839_gJgj1DxOfKA_00045__id07786.mp4"
86
+ ],
87
+ "part": "face",
88
+ "question": "Clip 2 is a real recording of one person. Look only at the faces: is the face in clip 1 the same person as in clip 2? Face means the inner face: eyes, nose and mouth.",
89
+ "options": [
90
+ "yes",
91
+ "no"
92
+ ],
93
+ "gt_answer": "no",
94
+ "pred_answer": "no",
95
+ "correct": true,
96
+ "raw": "```json\n{\"answer\": \"no\"}\n```"
97
+ }
98
+ ]
99
+ },
100
+ "t3_5": {
101
+ "scores": {
102
+ "n": 10,
103
+ "accuracy": 0.8,
104
+ "ci95": [
105
+ 0.4902,
106
+ 0.9433
107
+ ],
108
+ "balanced_accuracy": 0.75,
109
+ "cohen_kappa": 0.5455
110
+ },
111
+ "items": [
112
+ {
113
+ "id": "t35_face_A_RVRA__real__77f__main__id05877_q_ZAQf6KfTQ_00093__id05564",
114
+ "clips": [
115
+ "RVRA__real__77f__main__id05877_q_ZAQf6KfTQ_00093__id05564.mp4",
116
+ "RVRA__real__77f__main__id05877_6QUcq_6B-LU_00011__id07768.mp4"
117
+ ],
118
+ "part": "face",
119
+ "question": "Clip 2 is a real recording of one person. Look only at the faces: is clip 1 a real recording of that same person's face? Answer no if the face in clip 1 belongs to someone else, or was swapped, changed or made by a computer, even if it looks like that person. A real recording that was only processed, without changing whose face it is, still counts as real. Face means the inner face: eyes, nose and mouth.",
120
+ "options": [
121
+ "yes",
122
+ "no"
123
+ ],
124
+ "gt_answer": "yes",
125
+ "pred_answer": "yes",
126
+ "correct": true,
127
+ "raw": "```json\n{\"answer\": \"yes\"}\n```"
128
+ }
129
+ ]
130
+ }
131
+ }
132
+ }