spuuntries commited on
Commit
5b65e7f
·
1 Parent(s): ff4ee2d

feat: non-merged

Browse files
.gitattributes CHANGED
@@ -33,3 +33,7 @@ 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
+ model.safetensors filter=lfs diff=lfs merge=lfs -text
37
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
38
+ adapter/adapter_model.safetensors filter=lfs diff=lfs merge=lfs -text
39
+ dfk_hero_banner.png filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,580 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ base_model: aitf-komdigi/KomdigiITS-8B-DFK-CPT
3
+ library_name: peft
4
+ pipeline_tag: text-generation
5
+ tags:
6
+ - base_model:adapter:aitf-komdigi/KomdigiITS-8B-DFK-CPT
7
+ - lora
8
+ - sft
9
+ - transformers
10
+ - trl
11
+ - unsloth
12
+ - dfk-detection
13
+ - vlm
14
+ - indonesian
15
+ - multimodal
16
+ - image-classification
17
+ - content-moderation
18
+ ---
19
+
20
+ <style>
21
+ .df {
22
+ --bg: #0c1220;
23
+ --surface: #111a2a;
24
+ --edge: #1e2d42;
25
+ --rule: #283a52;
26
+ --text: #a0b0c4;
27
+ --dim: #556878;
28
+ --bright: #e4ecf4;
29
+ --accent: #d4a04a;
30
+ --accent2: #e8c06a;
31
+ --warn: #c06050;
32
+ --ac-glow: rgba(212,160,74,0.08);
33
+ --wn-glow: rgba(192,96,80,0.06);
34
+ --mono: 'JetBrains Mono', monospace;
35
+ --sans: 'Inter', sans-serif;
36
+
37
+ font-family: var(--sans);
38
+ color: var(--text);
39
+ max-width: 880px;
40
+ margin: 0 auto;
41
+ padding: 0 0 64px;
42
+ line-height: 1.7;
43
+ font-size: 1rem;
44
+ background:
45
+ radial-gradient(ellipse at 50% 0%, rgba(212,160,74,0.03) 0%, transparent 50%),
46
+ var(--bg);
47
+ }
48
+
49
+ /* ── Hero ── */
50
+ .df-hero { position: relative; overflow: hidden; }
51
+ .df-hero img { display: block; width: 100%; height: 340px; object-fit: cover; margin: 0; }
52
+ .df-ident {
53
+ position: absolute; bottom: 0; left: 0; right: 0;
54
+ padding: 100px 36px 32px;
55
+ background: linear-gradient(to top, var(--bg) 0%, rgba(12,18,32,0.92) 40%, transparent 100%);
56
+ }
57
+ .df-name {
58
+ font-size: 2.6rem; font-weight: 900; color: var(--bright);
59
+ letter-spacing: 0.04em; line-height: 1.05; margin: 0 0 10px;
60
+ text-shadow: 0 2px 8px rgba(0,0,0,0.5);
61
+ overflow-wrap: break-word;
62
+ }
63
+ .df-base {
64
+ font-family: var(--mono); font-size: 0.66rem;
65
+ color: var(--accent); letter-spacing: 0.14em;
66
+ text-transform: uppercase; display: block;
67
+ }
68
+
69
+ /* ── Sections ── */
70
+ .df-section { padding: 0; }
71
+ .df-shead {
72
+ position: relative; display: flex; align-items: center; gap: 14px;
73
+ padding: 16px 36px 14px; margin-bottom: 24px;
74
+ border-top: 2px solid; border-image: linear-gradient(90deg, var(--accent), var(--warn)) 1;
75
+ }
76
+ .df-snum {
77
+ font-family: var(--mono); font-size: 2rem; font-weight: 900;
78
+ color: var(--accent); letter-spacing: 0.06em; opacity: 0.10;
79
+ position: absolute; right: 36px; top: 50%; transform: translateY(-50%); line-height: 1;
80
+ }
81
+ .df-stitle {
82
+ font-size: 1.05rem; font-weight: 700; letter-spacing: 0.1em;
83
+ text-transform: uppercase; color: var(--bright);
84
+ }
85
+ .df-stitle::before {
86
+ content: '\2726'; color: var(--accent); font-size: 0.8em; margin-right: 8px;
87
+ }
88
+ .df-sbody { padding: 0 36px 40px; }
89
+ .df-sbody p { margin: 0 0 14px; font-size: 0.94rem; }
90
+ .df-sbody p:last-child { margin-bottom: 0; }
91
+
92
+ /* ── Sub-headings ── */
93
+ .df-sub {
94
+ color: var(--bright) !important; font-size: 0.95rem !important;
95
+ margin: 22px 0 12px !important; padding: 0 0 7px !important;
96
+ font-weight: 700; text-transform: uppercase; letter-spacing: 2px;
97
+ border: none !important; border-bottom: 1px solid var(--edge) !important;
98
+ }
99
+
100
+ /* ── Panels ── */
101
+ .df-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
102
+ .df-panel {
103
+ border: 1px solid var(--edge); border-left: 3px solid var(--accent);
104
+ position: relative; background: var(--surface);
105
+ box-shadow: 0 0 16px rgba(212,160,74,0.03);
106
+ }
107
+ .df-panel::before {
108
+ content: ''; position: absolute; top: -1px; right: -1px;
109
+ width: 9px; height: 9px;
110
+ border-top: 1px solid var(--accent); border-right: 1px solid var(--accent); opacity: 0.45;
111
+ }
112
+ .df-panel::after {
113
+ content: ''; position: absolute; bottom: -1px; right: -1px;
114
+ width: 9px; height: 9px;
115
+ border-bottom: 1px solid var(--warn); border-right: 1px solid var(--warn); opacity: 0.35;
116
+ }
117
+ .df-panel--warn { border-left-color: var(--warn); }
118
+ .df-phead {
119
+ font-family: var(--mono); font-size: 0.66rem; font-weight: 700;
120
+ letter-spacing: 0.14em; text-transform: uppercase; color: var(--dim);
121
+ padding: 9px 14px; border-bottom: 1px solid var(--edge);
122
+ }
123
+ .df-phead::after { content: ' \2726'; color: var(--accent); opacity: 0.4; }
124
+ .df-row {
125
+ display: grid; grid-template-columns: 13ch 1fr; align-items: baseline;
126
+ column-gap: 4px; padding: 8px 14px; border-bottom: 1px solid var(--edge); font-size: 0.88rem;
127
+ }
128
+ .df-row:last-child { border-bottom: none; }
129
+ .df-k { font-family: var(--mono); font-size: 0.88rem; color: var(--dim); }
130
+ .df-k::after { content: ':'; }
131
+ .df-v { color: var(--bright); font-size: 0.88rem; }
132
+ .df-row .df-v:only-child { grid-column: 1 / -1; }
133
+
134
+ /* ── Metric cards ── */
135
+ .df-metrics { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 18px; }
136
+ .df-metric {
137
+ background: var(--surface); border: 1px solid var(--edge);
138
+ border-top: 3px solid var(--accent); padding: 14px 10px 12px;
139
+ text-align: center; box-shadow: 0 0 12px var(--ac-glow);
140
+ position: relative;
141
+ }
142
+ .df-metric::before {
143
+ content: ''; position: absolute; top: -1px; right: -1px;
144
+ width: 8px; height: 8px;
145
+ border-top: 1px solid var(--accent); border-right: 1px solid var(--accent); opacity: 0.3;
146
+ }
147
+ .df-metric--hi { border-top-color: var(--warn); }
148
+ .df-metric--hi::before { border-color: var(--warn); }
149
+ .df-mval {
150
+ font-family: var(--mono); font-size: 1.6rem; font-weight: 900;
151
+ color: var(--accent); line-height: 1; margin-bottom: 4px;
152
+ }
153
+ .df-metric--hi .df-mval { color: var(--warn); }
154
+ .df-mlbl {
155
+ font-family: var(--mono); font-size: 0.54rem; font-weight: 700;
156
+ letter-spacing: 0.14em; text-transform: uppercase; color: var(--dim);
157
+ }
158
+
159
+ /* ── Note box ── */
160
+ .df-note {
161
+ border: 1px solid var(--edge); border-left: 3px solid var(--accent);
162
+ padding: 12px 16px; margin-top: 16px; background: var(--ac-glow);
163
+ font-size: 0.86rem; color: var(--dim); position: relative;
164
+ }
165
+ .df-note::before {
166
+ content: ''; position: absolute; top: -1px; right: -1px;
167
+ width: 8px; height: 8px;
168
+ border-top: 1px solid var(--accent); border-right: 1px solid var(--accent); opacity: 0.3;
169
+ }
170
+ .df-note strong {
171
+ color: var(--accent); font-family: var(--mono);
172
+ font-size: 0.68rem; letter-spacing: 0.1em; text-transform: uppercase;
173
+ }
174
+
175
+ /* ── Links ── */
176
+ .df a { color: var(--bright); text-decoration: none; border-bottom: 1px solid var(--rule); }
177
+ .df a:hover { color: var(--accent); border-bottom-color: var(--accent); }
178
+
179
+ /* ── Dropdown ── */
180
+ .df details {
181
+ border: 1px solid var(--edge); border-left: 3px solid var(--accent);
182
+ margin-top: 20px; position: relative; background: var(--surface);
183
+ box-shadow: 0 0 16px rgba(212,160,74,0.03);
184
+ }
185
+ .df details::before {
186
+ content: ''; position: absolute; top: -1px; right: -1px;
187
+ width: 9px; height: 9px;
188
+ border-top: 1px solid var(--accent); border-right: 1px solid var(--accent); opacity: 0.45;
189
+ }
190
+ .df details::after {
191
+ content: ''; position: absolute; bottom: -1px; right: -1px;
192
+ width: 9px; height: 9px;
193
+ border-bottom: 1px solid var(--warn); border-right: 1px solid var(--warn); opacity: 0.35;
194
+ }
195
+ .df summary {
196
+ list-style: none; padding: 10px 14px; cursor: pointer;
197
+ font-family: var(--mono); font-size: 0.7rem; font-weight: 700;
198
+ letter-spacing: 0.12em; text-transform: uppercase; color: var(--dim);
199
+ user-select: none; display: flex; align-items: center; gap: 10px;
200
+ }
201
+ .df summary::-webkit-details-marker { display: none; }
202
+ .df summary::before {
203
+ content: '+'; color: var(--accent); font-size: 1rem; line-height: 1; flex-shrink: 0;
204
+ }
205
+ .df details[open] summary::before { content: '\2212'; }
206
+ .df summary:hover { color: var(--bright); }
207
+ .df-drop-body { padding: 18px 16px; border-top: 1px solid var(--edge); }
208
+ .df-drop-body p { margin: 0 0 14px; font-size: 0.9rem; }
209
+
210
+ /* ── Code ── */
211
+ .df pre {
212
+ background: #080e18; border: 1px solid var(--edge); border-left: 2px solid var(--accent);
213
+ padding: 14px 16px; overflow-x: auto; font-family: var(--mono);
214
+ font-size: 0.74rem; line-height: 1.6; color: var(--text); margin: 0 0 18px;
215
+ }
216
+ .df pre:last-child { margin-bottom: 0; }
217
+ .df pre code { background: none; color: inherit; padding: 0; border: none; }
218
+ .df code {
219
+ font-family: var(--mono); font-size: 0.85em; color: var(--accent);
220
+ background: var(--ac-glow); padding: 2px 5px; border: 1px solid rgba(212,160,74,0.12);
221
+ }
222
+
223
+ /* ── Mobile ── */
224
+ @media (max-width: 640px) {
225
+ .df-hero img { height: 220px; }
226
+ .df-name { font-size: 1.8rem; }
227
+ .df-ident { padding: 80px 20px 24px; }
228
+ .df-shead { padding: 14px 20px 12px; }
229
+ .df-sbody { padding: 0 20px 32px; }
230
+ .df-snum { right: 20px; }
231
+ .df-grid { grid-template-columns: 1fr; }
232
+ .df-metrics { grid-template-columns: repeat(2, 1fr); }
233
+ .df-row { grid-template-columns: 1fr; gap: 2px; }
234
+ .df-k::after { content: ''; }
235
+ }
236
+ </style>
237
+ <html lang="en">
238
+ <head>
239
+ <meta charset="UTF-8">
240
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
241
+ <title>KomdigiITS-8B-DFK-MultimodalClassification</title>
242
+ <link rel="preconnect" href="https://fonts.googleapis.com">
243
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
244
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800;900&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
245
+ </head>
246
+ <body>
247
+ <div class="df">
248
+
249
+ <div class="df-hero">
250
+ <img src="dfk_hero_banner.png" alt="image">
251
+ <div class="df-ident">
252
+ <h1 class="df-name">KomdigiITS-8B-DFK<br>Multimodal Classification</h1>
253
+ <span class="df-base">Ministral-3-8B-Base-2512 &middot; LoRA &middot; Vision-Language</span>
254
+ </div>
255
+ </div>
256
+
257
+ <!-- ═══════════════════ 01 · Overview ═══════════════════ -->
258
+ <div class="df-section">
259
+ <div class="df-shead">
260
+ <span class="df-snum">01</span>
261
+ <span class="df-stitle">Overview</span>
262
+ </div>
263
+ <div class="df-sbody">
264
+ <p>A LoRA adapter fine-tuned on <a href="https://huggingface.co/aitf-komdigi/KomdigiITS-8B-DFK-CPT">aitf-komdigi/KomdigiITS-8B-DFK-CPT</a> (Ministral-3-8B-Base-2512 based) as a Vision-Language Model for multimodal content classification. The model analyzes social media screenshots and classifies them into four categories: <code>netral</code>, <code>disinformasi</code>, <code>fitnah</code>, and <code>ujaran kebencian</code>.</p>
265
+ <p>Trained using the <a href="https://github.com/aitf-its-tim3-dfk/SITA">SITA</a> framework with Unsloth's SFT pipeline. Given an image, the model produces a structured analysis with a classification label and a detailed Indonesian-language reasoning of any violations found.</p>
266
+ <div class="df-note">
267
+ <strong>&#9830; Note:</strong> This is the final checkpoint from Workshop 3 (<code>final-ministral-8b-cpt-ws3</code>), trained on the DFK VLM Dataset V3 with augmented train/val splits. The base model (<code>aitf-komdigi/KomdigiITS-8B-DFK-CPT</code>) was continual-pretrained on DFK domain-oriented text before fine-tuning.
268
+ </div>
269
+ </div>
270
+ </div>
271
+
272
+ <!-- ═══════════════════ 02 · Model Details ═══════════════════ -->
273
+ <div class="df-section">
274
+ <div class="df-shead">
275
+ <span class="df-snum">02</span>
276
+ <span class="df-stitle">Model Details</span>
277
+ </div>
278
+ <div class="df-sbody">
279
+ <div class="df-grid">
280
+ <div class="df-panel">
281
+ <div class="df-phead">Identity</div>
282
+ <div class="df-row"><span class="df-k">Developed</span><span class="df-v">DFK Tim 3 ITS</span></div>
283
+ <div class="df-row"><span class="df-k">Type</span><span class="df-v">VLM &mdash; LoRA adapter</span></div>
284
+ <div class="df-row"><span class="df-k">Language</span><span class="df-v">Indonesian</span></div>
285
+ </div>
286
+ <div class="df-panel">
287
+ <div class="df-phead">Architecture</div>
288
+ <div class="df-row"><span class="df-k">Base</span><span class="df-v"><a href="https://huggingface.co/aitf-komdigi/KomdigiITS-8B-DFK-CPT">KomdigiITS-8B-DFK-CPT</a></span></div>
289
+ <div class="df-row"><span class="df-k">Arch</span><span class="df-v">Mistral3ForConditionalGeneration</span></div>
290
+ <div class="df-row"><span class="df-k">Params</span><span class="df-v">8B (base)</span></div>
291
+ <div class="df-row"><span class="df-k">Precision</span><span class="df-v">float16</span></div>
292
+ </div>
293
+ </div>
294
+ </div>
295
+ </div>
296
+
297
+ <!-- ═══════════════════ 03 · Uses ═══════════════════ -->
298
+ <div class="df-section">
299
+ <div class="df-shead">
300
+ <span class="df-snum">03</span>
301
+ <span class="df-stitle">Uses</span>
302
+ </div>
303
+ <div class="df-sbody">
304
+ <h3 class="df-sub">Direct Use</h3>
305
+ <div class="df-panel" style="margin-bottom:16px;">
306
+ <div class="df-row"><span class="df-v">Image-based content moderation classification for Indonesian social media. Given a screenshot, the model produces a structured analysis with a classification label (<code>netral</code>, <code>disinformasi</code>, <code>fitnah</code>, or <code>ujaran kebencian</code>) and a detailed reasoning in Indonesian.</span></div>
307
+ </div>
308
+ <h3 class="df-sub">Out-of-Scope Use</h3>
309
+ <div class="df-panel df-panel--warn">
310
+ <div class="df-row"><span class="df-v">This model is not intended for general-purpose vision-language tasks. It is specialized for the DFK disinformation detection pipeline and should not be used for content moderation in other languages or domains without further fine-tuning.</span></div>
311
+ </div>
312
+ </div>
313
+ </div>
314
+
315
+ <!-- ═══════════════════ 04 · Evaluation ═══════════════════ -->
316
+ <div class="df-section">
317
+ <div class="df-shead">
318
+ <span class="df-snum">04</span>
319
+ <span class="df-stitle">Evaluation</span>
320
+ </div>
321
+ <div class="df-sbody">
322
+ <p>Evaluated on the held-out validation split using greedy decoding (<code>temperature=0.0</code>) and BERTScore (<code>bert-base-multilingual-cased</code>).</p>
323
+ <div class="df-metrics">
324
+ <div class="df-metric df-metric--hi">
325
+ <div class="df-mval">94.3</div>
326
+ <div class="df-mlbl">Accuracy</div>
327
+ </div>
328
+ <div class="df-metric">
329
+ <div class="df-mval">91.6</div>
330
+ <div class="df-mlbl">F1 Macro</div>
331
+ </div>
332
+ <div class="df-metric">
333
+ <div class="df-mval">94.3</div>
334
+ <div class="df-mlbl">F1 Weighted</div>
335
+ </div>
336
+ <div class="df-metric">
337
+ <div class="df-mval">80.2</div>
338
+ <div class="df-mlbl">BERTScore F1</div>
339
+ </div>
340
+ </div>
341
+ <details>
342
+ <summary>Per-Class Breakdown</summary>
343
+ <div class="df-drop-body">
344
+ <div class="df-panel" style="margin-bottom:0;">
345
+ <div class="df-row"><span class="df-k">Netral</span><span class="df-v">P 0.937 &middot; R 0.973 &middot; F1 0.954 &middot; n=970</span></div>
346
+ <div class="df-row"><span class="df-k">Ujrn Kbnci</span><span class="df-v">P 0.979 &middot; R 0.960 &middot; F1 0.969 &middot; n=867</span></div>
347
+ <div class="df-row"><span class="df-k">Disinfo</span><span class="df-v">P 0.946 &middot; R 0.895 &middot; F1 0.920 &middot; n=392</span></div>
348
+ <div class="df-row"><span class="df-k">Fitnah</span><span class="df-v">P 0.822 &middot; R 0.822 &middot; F1 0.822 &middot; n=213</span></div>
349
+ </div>
350
+ </div>
351
+ </details>
352
+ <details>
353
+ <summary>Generation Quality Metrics</summary>
354
+ <div class="df-drop-body">
355
+ <div class="df-panel">
356
+ <div class="df-phead">BERTScore &middot; bert-base-multilingual-cased</div>
357
+ <div class="df-row"><span class="df-k">Precision</span><span class="df-v">0.804</span></div>
358
+ <div class="df-row"><span class="df-k">Recall</span><span class="df-v">0.801</span></div>
359
+ <div class="df-row"><span class="df-k">F1</span><span class="df-v">0.802</span></div>
360
+ </div>
361
+ <div class="df-panel" style="margin-top:12px;">
362
+ <div class="df-phead">ROUGE-L &middot; n-gram overlap</div>
363
+ <div class="df-row"><span class="df-k">Precision</span><span class="df-v">0.400</span></div>
364
+ <div class="df-row"><span class="df-k">Recall</span><span class="df-v">0.387</span></div>
365
+ <div class="df-row"><span class="df-k">F1</span><span class="df-v">0.387</span></div>
366
+ </div>
367
+ </div>
368
+ </details>
369
+ </div>
370
+ </div>
371
+
372
+ <!-- ═══════════════════ 05 · Training Details ═══════════════════ -->
373
+ <div class="df-section">
374
+ <div class="df-shead">
375
+ <span class="df-snum">05</span>
376
+ <span class="df-stitle">Training Details</span>
377
+ </div>
378
+ <div class="df-sbody">
379
+ <h3 class="df-sub">Training Data</h3>
380
+ <div class="df-panel" style="margin-bottom:16px;">
381
+ <div class="df-row"><span class="df-k">Dataset</span><span class="df-v"><code>dfk_vlm_dataset_v3</code> (augmented on <code>fitnah</code> class)</span></div>
382
+ <div class="df-row"><span class="df-k">Splits</span><span class="df-v">Fixed (train_aug.csv / val_aug.csv)</span></div>
383
+ <div class="df-row"><span class="df-k">Train</span><span class="df-v">14,293 samples</span></div>
384
+ <div class="df-row"><span class="df-k">Val</span><span class="df-v">2,831 samples</span></div>
385
+ </div>
386
+ <h3 class="df-sub">Label Classes</h3>
387
+ <div class="df-panel" style="margin-bottom:16px;">
388
+ <div class="df-row"><span class="df-k">Netral</span><span class="df-v">Factual content or non-DFK material &mdash; no violation detected</span></div>
389
+ <div class="df-row"><span class="df-k">Disinfo</span><span class="df-v">Claims that contradict established facts, not directed at a specific person</span></div>
390
+ <div class="df-row"><span class="df-k">Fitnah</span><span class="df-v">False claims directed at a specific individual (defamation)</span></div>
391
+ <div class="df-row"><span class="df-k">Ujrn Kbnci</span><span class="df-v">Hate speech targeting ethnicity, religion, race, or intergroup identity (SARA)</span></div>
392
+ </div>
393
+ <details>
394
+ <summary>Dataset Distribution</summary>
395
+ <div class="df-drop-body">
396
+ <div class="df-panel">
397
+ <div class="df-phead">Train (augmented) &middot; 14,293 total</div>
398
+ <div class="df-row"><span class="df-k">Netral</span><span class="df-v">3,883 (27.2%)</span></div>
399
+ <div class="df-row"><span class="df-k">Fitnah</span><span class="df-v">3,846 (26.9%)</span></div>
400
+ <div class="df-row"><span class="df-k">Ujrn Kbnci</span><span class="df-v">3,484 (24.4%)</span></div>
401
+ <div class="df-row"><span class="df-k">Disinfo</span><span class="df-v">3,080 (21.6%)</span></div>
402
+ </div>
403
+ <div class="df-panel" style="margin-top:12px;">
404
+ <div class="df-phead">Val (augmented) &middot; 2,831 total</div>
405
+ <div class="df-row"><span class="df-k">Netral</span><span class="df-v">970 (34.3%)</span></div>
406
+ <div class="df-row"><span class="df-k">Ujrn Kbnci</span><span class="df-v">867 (30.6%)</span></div>
407
+ <div class="df-row"><span class="df-k">Disinfo</span><span class="df-v">765 (27.0%)</span></div>
408
+ <div class="df-row"><span class="df-k">Fitnah</span><span class="df-v">229 (8.1%)</span></div>
409
+ </div>
410
+ </div>
411
+ </details>
412
+ <h3 class="df-sub">Configuration</h3>
413
+ <div class="df-grid" style="margin-top:20px;">
414
+ <div class="df-panel">
415
+ <div class="df-phead">LoRA Configuration</div>
416
+ <div class="df-row"><span class="df-k">r</span><span class="df-v">16</span></div>
417
+ <div class="df-row"><span class="df-k">Alpha</span><span class="df-v">16</span></div>
418
+ <div class="df-row"><span class="df-k">Dropout</span><span class="df-v">0.1</span></div>
419
+ <div class="df-row"><span class="df-k">Targets</span><span class="df-v">all-linear</span></div>
420
+ <div class="df-row"><span class="df-k">Vision</span><span class="df-v">&#10003; finetuned</span></div>
421
+ <div class="df-row"><span class="df-k">Language</span><span class="df-v">&#10003; finetuned</span></div>
422
+ <div class="df-row"><span class="df-k">Attention</span><span class="df-v">&#10003; finetuned</span></div>
423
+ <div class="df-row"><span class="df-k">MLP</span><span class="df-v">&#10003; finetuned</span></div>
424
+ </div>
425
+ <div class="df-panel">
426
+ <div class="df-phead">Hyperparameters</div>
427
+ <div class="df-row"><span class="df-k">Epochs</span><span class="df-v">3</span></div>
428
+ <div class="df-row"><span class="df-k">Batch</span><span class="df-v">16 (4 &times; 4 accum)</span></div>
429
+ <div class="df-row"><span class="df-k">LR</span><span class="df-v">5e-4</span></div>
430
+ <div class="df-row"><span class="df-k">Optimizer</span><span class="df-v">AdamW 8-bit</span></div>
431
+ <div class="df-row"><span class="df-k">Max len</span><span class="df-v">4096</span></div>
432
+ <div class="df-row"><span class="df-k">Grad norm</span><span class="df-v">1</span></div>
433
+ <div class="df-row"><span class="df-k">Warmup</span><span class="df-v">0.03</span></div>
434
+ <div class="df-row"><span class="df-k">Grad ckpt</span><span class="df-v">unsloth</span></div>
435
+ <div class="df-row"><span class="df-k">Seed</span><span class="df-v">3407</span></div>
436
+ </div>
437
+ </div>
438
+ <h3 class="df-sub" style="margin-top:24px;">Trainer</h3>
439
+ <div class="df-panel" style="margin-bottom:16px;">
440
+ <div class="df-row"><span class="df-k">Type</span><span class="df-v"><code>unsloth_vlm_sft</code> (Unsloth VLM SFT trainer)</span></div>
441
+ <div class="df-row"><span class="df-k">Train on</span><span class="df-v">Responses only</span></div>
442
+ <div class="df-row"><span class="df-k">Instr part</span><span class="df-v"><code>[INST]</code></span></div>
443
+ <div class="df-row"><span class="df-k">Resp part</span><span class="df-v"><code>[/INST]</code></span></div>
444
+ <div class="df-row"><span class="df-k">Best model</span><span class="df-v">Selected by <code>eval_loss</code> (lower is better)</span></div>
445
+ </div>
446
+ <details>
447
+ <summary>Prompt Template</summary>
448
+ <div class="df-drop-body">
449
+ <p>Each sample is formatted as a multi-turn conversation using the <code>ministral_3</code> chat template. The dataset builds structured content blocks which the Jinja template renders as:</p>
450
+ <pre><code>&lt;s&gt;[SYSTEM_PROMPT]...default Ministral system prompt...[/SYSTEM_PROMPT][INST]Anda adalah seorang analis konten media sosial ahli. Diberikan tangkapan layar dari sebuah konten, tentukan label kategori pelanggaran dan berikan analisis detail mengenai pelanggaran yang ditemukan.Ringkasan: {ringkasan}
451
+ Klaim: {klaim}
452
+ Fakta: {fakta}[IMG][/INST]Label: {label}
453
+
454
+ Analisis: {analisis}&lt;/s&gt;</code></pre>
455
+
456
+ <h3 class="df-sub" style="margin-top:20px;">Input Fields</h3>
457
+ <div class="df-panel" style="margin-bottom:16px;">
458
+ <div class="df-row"><span class="df-k">Ringkasan</span><span class="df-v">Content summary. In the RAG pipeline this is the concatenation of the image caption (from a captioning model) and any user-provided text (e.g. post caption, tweet text). Effectively holds all available textual context about the content.</span></div>
459
+ <div class="df-row"><span class="df-k">Klaim</span><span class="df-v">The core claim extracted from the content, used as a web search query for fact-checking. Generated by an LLM from the ringkasan. Can also be a direct caption or user-provided text in simpler setups.</span></div>
460
+ <div class="df-row"><span class="df-k">Fakta</span><span class="df-v">Verification context retrieved via web search. Contains numbered search results with titles, descriptions, and source URLs. If no relevant sources are found, defaults to <code>"Tidak ditemukan sumber yang valid."</code></span></div>
461
+ <div class="df-row"><span class="df-k">[IMG]</span><span class="df-v">Screenshot of the social media post being analyzed.</span></div>
462
+ </div>
463
+ <h3 class="df-sub">Output Fields</h3>
464
+ <div class="df-panel">
465
+ <div class="df-row"><span class="df-k">Label</span><span class="df-v">One of <code>netral</code>, <code>disinformasi</code>, <code>fitnah</code>, or <code>ujaran kebencian</code>.</span></div>
466
+ <div class="df-row"><span class="df-k">Analisis</span><span class="df-v">Free-form Indonesian-language explanation of why the content was assigned its label, referencing the image, context, and any retrieved facts.</span></div>
467
+ </div>
468
+ </div>
469
+ </details>
470
+ <details>
471
+ <summary>Full Training Config</summary>
472
+ <div class="df-drop-body">
473
+ <pre><code>experiment_name: final&#45;ministral&#45;8b&#45;cpt&#45;ws3
474
+ seed: 3407
475
+
476
+ reporting:
477
+ wandb: true
478
+ wandb_project: "DFK3"
479
+
480
+ model:
481
+ name: unsloth_vlm
482
+ pretrained: aitf&#45;komdigi/KomdigiITS&#45;8B&#45;DFK&#45;CPT
483
+ kwargs:
484
+ load_in_4bit: false
485
+ chat_template: "sita/templates/ministral_3.jinja"
486
+
487
+ adapter:
488
+ name: unsloth_vlm_lora
489
+ kwargs:
490
+ finetune_vision_layers: true
491
+ finetune_language_layers: true
492
+ finetune_attention_modules: true
493
+ finetune_mlp_modules: true
494
+ r: 16
495
+ lora_alpha: 16
496
+ lora_dropout: 0.1
497
+ bias: "none"
498
+ target_modules: "all&#45;linear"
499
+ use_gradient_checkpointing: "unsloth"
500
+ random_state: 3407
501
+
502
+ dataset:
503
+ name: dfk_vlm_dataset_v3
504
+ kwargs:
505
+ data_dir: /content/dataset/images/images
506
+
507
+ training:
508
+ num_epochs: 3
509
+ batch_size: 4
510
+ learning_rate: 5e&#45;4
511
+ gradient_accumulation_steps: 4
512
+ max_grad_norm: 1
513
+ warmup_ratio: 0.03
514
+ weight_decay: 0
515
+ logging_steps: 1
516
+ eval_steps: 250
517
+ extra:
518
+ seed: 3407
519
+ max_length: 4096
520
+ load_best_model_at_end: true
521
+ metric_for_best_model: eval_loss
522
+ greater_is_better: false
523
+
524
+ trainer:
525
+ name: unsloth_vlm_sft
526
+ kwargs:
527
+ train_on_responses_only: true
528
+ instruction_part: "[INST]"
529
+ response_part: "[/INST]"
530
+ optim: adamw_8bit
531
+
532
+ evaluation:
533
+ name: vlm_gen
534
+ kwargs:
535
+ max_new_tokens: 512
536
+ temperature: 0.0
537
+ bert_model: bert&#45;base&#45;multilingual&#45;cased
538
+ batch_size: 16
539
+ num_workers: 11</code></pre>
540
+
541
+ </div>
542
+ </details>
543
+ </div>
544
+ </div>
545
+
546
+ <!-- ═══════════════════ 06 · Model Sources ═══════════════════ -->
547
+ <div class="df-section">
548
+ <div class="df-shead">
549
+ <span class="df-snum">06</span>
550
+ <span class="df-stitle">Model Sources</span>
551
+ </div>
552
+ <div class="df-sbody">
553
+ <div class="df-panel">
554
+ <div class="df-row"><span class="df-k">Framework</span><span class="df-v"><a href="https://github.com/aitf-its-tim3-dfk/SITA">SITA</a></span></div>
555
+ <div class="df-row"><span class="df-k">W&amp;B Run</span><span class="df-v"><a href="https://wandb.ai/aitfits2026-kementerian-komdigi/DFK3/runs/zbplofhf">DFK3 / final-ministral-8b-cpt-ws3</a></span></div>
556
+ </div>
557
+ </div>
558
+ </div>
559
+
560
+ <!-- ═══════════════════ 07 · Framework Versions ═══════════════════ -->
561
+ <div class="df-section">
562
+ <div class="df-shead">
563
+ <span class="df-snum">07</span>
564
+ <span class="df-stitle">Framework Versions</span>
565
+ </div>
566
+ <div class="df-sbody">
567
+ <div class="df-panel">
568
+ <div class="df-row"><span class="df-k">TRL</span><span class="df-v">0.24.0</span></div>
569
+ <div class="df-row"><span class="df-k">Transformers</span><span class="df-v">5.5.0</span></div>
570
+ <div class="df-row"><span class="df-k">PyTorch</span><span class="df-v">2.11.0+cu128</span></div>
571
+ <div class="df-row"><span class="df-k">Datasets</span><span class="df-v">4.3.0</span></div>
572
+ <div class="df-row"><span class="df-k">PEFT</span><span class="df-v">0.19.0</span></div>
573
+ <div class="df-row"><span class="df-k">Tokenizers</span><span class="df-v">0.22.2</span></div>
574
+ </div>
575
+ </div>
576
+ </div>
577
+
578
+ </div>
579
+ </body>
580
+ </html>
adapter/.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz 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
adapter/README.md ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ base_model: aitf-komdigi/ministral-8b-dfk-cpt-last
3
+ library_name: peft
4
+ pipeline_tag: text-generation
5
+ tags:
6
+ - base_model:adapter:aitf-komdigi/ministral-8b-dfk-cpt-last
7
+ - lora
8
+ - sft
9
+ - transformers
10
+ - trl
11
+ - unsloth
12
+ ---
13
+
14
+ # Model Card for Model ID
15
+
16
+ <!-- Provide a quick summary of what the model is/does. -->
17
+
18
+
19
+
20
+ ## Model Details
21
+
22
+ ### Model Description
23
+
24
+ <!-- Provide a longer summary of what this model is. -->
25
+
26
+
27
+
28
+ - **Developed by:** [More Information Needed]
29
+ - **Funded by [optional]:** [More Information Needed]
30
+ - **Shared by [optional]:** [More Information Needed]
31
+ - **Model type:** [More Information Needed]
32
+ - **Language(s) (NLP):** [More Information Needed]
33
+ - **License:** [More Information Needed]
34
+ - **Finetuned from model [optional]:** [More Information Needed]
35
+
36
+ ### Model Sources [optional]
37
+
38
+ <!-- Provide the basic links for the model. -->
39
+
40
+ - **Repository:** [More Information Needed]
41
+ - **Paper [optional]:** [More Information Needed]
42
+ - **Demo [optional]:** [More Information Needed]
43
+
44
+ ## Uses
45
+
46
+ <!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. -->
47
+
48
+ ### Direct Use
49
+
50
+ <!-- This section is for the model use without fine-tuning or plugging into a larger ecosystem/app. -->
51
+
52
+ [More Information Needed]
53
+
54
+ ### Downstream Use [optional]
55
+
56
+ <!-- This section is for the model use when fine-tuned for a task, or when plugged into a larger ecosystem/app -->
57
+
58
+ [More Information Needed]
59
+
60
+ ### Out-of-Scope Use
61
+
62
+ <!-- This section addresses misuse, malicious use, and uses that the model will not work well for. -->
63
+
64
+ [More Information Needed]
65
+
66
+ ## Bias, Risks, and Limitations
67
+
68
+ <!-- This section is meant to convey both technical and sociotechnical limitations. -->
69
+
70
+ [More Information Needed]
71
+
72
+ ### Recommendations
73
+
74
+ <!-- This section is meant to convey recommendations with respect to the bias, risk, and technical limitations. -->
75
+
76
+ Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
77
+
78
+ ## How to Get Started with the Model
79
+
80
+ Use the code below to get started with the model.
81
+
82
+ [More Information Needed]
83
+
84
+ ## Training Details
85
+
86
+ ### Training Data
87
+
88
+ <!-- This should link to a Dataset Card, perhaps with a short stub of information on what the training data is all about as well as documentation related to data pre-processing or additional filtering. -->
89
+
90
+ [More Information Needed]
91
+
92
+ ### Training Procedure
93
+
94
+ <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
95
+
96
+ #### Preprocessing [optional]
97
+
98
+ [More Information Needed]
99
+
100
+
101
+ #### Training Hyperparameters
102
+
103
+ - **Training regime:** [More Information Needed] <!--fp32, fp16 mixed precision, bf16 mixed precision, bf16 non-mixed precision, fp16 non-mixed precision, fp8 mixed precision -->
104
+
105
+ #### Speeds, Sizes, Times [optional]
106
+
107
+ <!-- This section provides information about throughput, start/end time, checkpoint size if relevant, etc. -->
108
+
109
+ [More Information Needed]
110
+
111
+ ## Evaluation
112
+
113
+ <!-- This section describes the evaluation protocols and provides the results. -->
114
+
115
+ ### Testing Data, Factors & Metrics
116
+
117
+ #### Testing Data
118
+
119
+ <!-- This should link to a Dataset Card if possible. -->
120
+
121
+ [More Information Needed]
122
+
123
+ #### Factors
124
+
125
+ <!-- These are the things the evaluation is disaggregating by, e.g., subpopulations or domains. -->
126
+
127
+ [More Information Needed]
128
+
129
+ #### Metrics
130
+
131
+ <!-- These are the evaluation metrics being used, ideally with a description of why. -->
132
+
133
+ [More Information Needed]
134
+
135
+ ### Results
136
+
137
+ [More Information Needed]
138
+
139
+ #### Summary
140
+
141
+
142
+
143
+ ## Model Examination [optional]
144
+
145
+ <!-- Relevant interpretability work for the model goes here -->
146
+
147
+ [More Information Needed]
148
+
149
+ ## Environmental Impact
150
+
151
+ <!-- Total emissions (in grams of CO2eq) and additional considerations, such as electricity usage, go here. Edit the suggested text below accordingly -->
152
+
153
+ Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700).
154
+
155
+ - **Hardware Type:** [More Information Needed]
156
+ - **Hours used:** [More Information Needed]
157
+ - **Cloud Provider:** [More Information Needed]
158
+ - **Compute Region:** [More Information Needed]
159
+ - **Carbon Emitted:** [More Information Needed]
160
+
161
+ ## Technical Specifications [optional]
162
+
163
+ ### Model Architecture and Objective
164
+
165
+ [More Information Needed]
166
+
167
+ ### Compute Infrastructure
168
+
169
+ [More Information Needed]
170
+
171
+ #### Hardware
172
+
173
+ [More Information Needed]
174
+
175
+ #### Software
176
+
177
+ [More Information Needed]
178
+
179
+ ## Citation [optional]
180
+
181
+ <!-- If there is a paper or blog post introducing the model, the APA and Bibtex information for that should go in this section. -->
182
+
183
+ **BibTeX:**
184
+
185
+ [More Information Needed]
186
+
187
+ **APA:**
188
+
189
+ [More Information Needed]
190
+
191
+ ## Glossary [optional]
192
+
193
+ <!-- If relevant, include terms and calculations in this section that can help readers understand the model or model card. -->
194
+
195
+ [More Information Needed]
196
+
197
+ ## More Information [optional]
198
+
199
+ [More Information Needed]
200
+
201
+ ## Model Card Authors [optional]
202
+
203
+ [More Information Needed]
204
+
205
+ ## Model Card Contact
206
+
207
+ [More Information Needed]
208
+ ### Framework versions
209
+
210
+ - PEFT 0.19.1
adapter/adapter_config.json ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": {
6
+ "base_model_class": "Mistral3ForConditionalGeneration",
7
+ "parent_library": "transformers.models.mistral3.modeling_mistral3",
8
+ "unsloth_fixed": true
9
+ },
10
+ "base_model_name_or_path": "aitf-komdigi/ministral-8b-dfk-cpt-last",
11
+ "bias": "none",
12
+ "corda_config": null,
13
+ "ensure_weight_tying": false,
14
+ "eva_config": null,
15
+ "exclude_modules": null,
16
+ "fan_in_fan_out": false,
17
+ "inference_mode": true,
18
+ "init_lora_weights": true,
19
+ "layer_replication": null,
20
+ "layers_pattern": null,
21
+ "layers_to_transform": null,
22
+ "loftq_config": {},
23
+ "lora_alpha": 16,
24
+ "lora_bias": false,
25
+ "lora_dropout": 0.1,
26
+ "lora_ga_config": null,
27
+ "megatron_config": null,
28
+ "megatron_core": "megatron.core",
29
+ "modules_to_save": null,
30
+ "peft_type": "LORA",
31
+ "peft_version": "0.19.1",
32
+ "qalora_group_size": 16,
33
+ "r": 16,
34
+ "rank_pattern": {},
35
+ "revision": null,
36
+ "target_modules": "(?:.*?(?:vision|image|visual|patch|language|text).*?(?:self_attn|attention|attn|mlp|feed_forward|ffn|dense).*?(?:gate_proj|up_proj|down_proj|k_proj|v_proj|q_proj|o_proj).*?)|(?:\\bmodel\\.layers\\.[\\d]{1,}\\.(?:self_attn|attention|attn|mlp|feed_forward|ffn|dense)\\.(?:(?:gate_proj|up_proj|down_proj|k_proj|v_proj|q_proj|o_proj)))",
37
+ "target_parameters": null,
38
+ "task_type": "CAUSAL_LM",
39
+ "trainable_token_indices": null,
40
+ "use_bdlora": null,
41
+ "use_dora": false,
42
+ "use_qalora": false,
43
+ "use_rslora": false
44
+ }
adapter/adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f3697db02b23e1f1e42394f9cf5567a736be1539920eb238f3aba503b0cddf22
3
+ size 214559872
chat_template.jinja ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {#- Unsloth template fixes #}
2
+ {#- Default system message if no system prompt is passed. #}
3
+ {%- set default_system_message = 'You are Ministral-3-8B-Instruct-2512, a Large Language Model (LLM) created by Mistral AI, a French startup headquartered in Paris.\nYou power an AI assistant called Le Chat.\nYour knowledge base was last updated on 2023-10-01.\nThe current date is {today}.\n\nWhen you\'re not sure about some information or when the user\'s request requires up-to-date or specific data, you must use the available tools to fetch the information. Do not hesitate to use tools whenever they can provide a more accurate or complete response. If no relevant tools are available, then clearly state that you don\'t have the information and avoid making up anything.\nIf the user\'s question is not clear, ambiguous, or does not provide enough context for you to accurately answer the question, you do not try to answer it right away and you rather ask the user to clarify their request (e.g. "What are some good restaurants around me?" => "Where are you?" or "When is the next flight to Tokyo" => "Where do you travel from?").\nYou are always very attentive to dates, in particular you try to resolve dates (e.g. "yesterday" is {yesterday}) and when asked about information at specific dates, you discard information that is at another date.\nYou follow these instructions in all languages, and always respond to the user in the language they use or request.\nNext sections describe the capabilities that you have.\n\n# WEB BROWSING INSTRUCTIONS\n\nYou cannot perform any web search or access internet to open URLs, links etc. If it seems like the user is expecting you to do so, you clarify the situation and ask the user to copy paste the text directly in the chat.\n\n# MULTI-MODAL INSTRUCTIONS\n\nYou have the ability to read images, but you cannot generate images. You also cannot transcribe audio files or videos.\nYou cannot read nor transcribe audio files or videos.\n\n# TOOL CALLING INSTRUCTIONS\n\nYou may have access to tools that you can use to fetch information or perform actions. You must use these tools in the following situations:\n\n1. When the request requires up-to-date information.\n2. When the request requires specific data that you do not have in your knowledge base.\n3. When the request involves actions that you cannot perform without tools.\n\nAlways prioritize using tools to provide the most accurate and helpful response. If tools are not available, inform the user that you cannot perform the requested action at the moment.' %}
4
+
5
+ {#- Begin of sequence token. #}
6
+ {{- bos_token }}
7
+
8
+ {#- Handle system prompt if it exists. #}
9
+ {#- System prompt supports text content or text chunks. #}
10
+ {%- if messages[0]['role'] == 'system' %}
11
+ {{- '[SYSTEM_PROMPT]' -}}
12
+ {%- if messages[0]['content'] is string %}
13
+ {{- messages[0]['content'] -}}
14
+ {%- else %}
15
+ {%- for block in messages[0]['content'] %}
16
+ {%- if block['type'] == 'text' %}
17
+ {{- block['text'] }}
18
+ {%- else %}
19
+ {{- raise_exception('Only text chunks are supported in system message contents.') }}
20
+ {%- endif %}
21
+ {%- endfor %}
22
+ {%- endif %}
23
+ {{- '[/SYSTEM_PROMPT]' -}}
24
+ {%- set loop_messages = messages[1:] %}
25
+ {%- else %}
26
+ {%- set loop_messages = messages %}
27
+ {%- if default_system_message != '' %}
28
+ {{- '[SYSTEM_PROMPT]' + default_system_message + '[/SYSTEM_PROMPT]' }}
29
+ {%- endif %}
30
+ {%- endif %}
31
+
32
+
33
+ {#- Tools definition #}
34
+ {%- set tools_definition = '' %}
35
+ {%- set has_tools = false %}
36
+ {%- if tools is defined and tools is not none and tools|length > 0 %}
37
+ {%- set has_tools = true %}
38
+ {%- set tools_definition = '[AVAILABLE_TOOLS]' + (tools| tojson) + '[/AVAILABLE_TOOLS]' %}
39
+ {{- tools_definition }}
40
+ {%- endif %}
41
+
42
+ {#- Checks for alternating user/assistant messages. #}
43
+ {%- set ns = namespace(index=0) %}
44
+ {%- for message in loop_messages %}
45
+ {%- if message.role == 'user' or (message.role == 'assistant' and (message.tool_calls is not defined or message.tool_calls is none or message.tool_calls | length == 0)) %}
46
+ {%- if (message['role'] == 'user') != (ns.index % 2 == 0) %}
47
+ {{- raise_exception('After the optional system message, conversation roles must alternate user and assistant roles except for tool calls and results.') }}
48
+ {%- endif %}
49
+ {%- set ns.index = ns.index + 1 %}
50
+ {%- endif %}
51
+ {%- endfor %}
52
+
53
+ {#- Handle conversation messages. #}
54
+ {%- for message in loop_messages %}
55
+
56
+ {#- User messages supports text content or text and image chunks. #}
57
+ {%- if message['role'] == 'user' %}
58
+ {%- if message['content'] is string %}
59
+ {{- '[INST]' + message['content'] + '[/INST]' }}
60
+ {%- elif message['content'] | length > 0 %}
61
+ {{- '[INST]' }}
62
+ {%- if message['content'] | length == 2 %}
63
+ {%- set blocks = message['content'] | sort(attribute='type') %}
64
+ {%- else %}
65
+ {%- set blocks = message['content'] %}
66
+ {%- endif %}
67
+ {%- for block in blocks %}
68
+ {%- if block['type'] == 'text' %}
69
+ {{- block['text'] }}
70
+ {%- elif block['type'] in ['image', 'image_url'] %}
71
+ {{- '[IMG]' }}
72
+ {%- else %}
73
+ {{- raise_exception('Only text, image and image_url chunks are supported in user message content.') }}
74
+ {%- endif %}
75
+ {%- endfor %}
76
+ {{- '[/INST]' }}
77
+ {%- else %}
78
+ {{- raise_exception('User message must have a string or a list of chunks in content') }}
79
+ {%- endif %}
80
+
81
+ {#- Assistant messages supports text content or text and image chunks. #}
82
+ {%- elif message['role'] == 'assistant' %}
83
+
84
+ {%- if message['content'] is string %}
85
+ {{- message['content'] }}
86
+ {%- elif message['content'] is iterable and message['content'] | length > 0 %}
87
+ {%- for block in message['content'] %}
88
+ {%- if block['type'] == 'text' %}
89
+ {{- block['text'] }}
90
+ {%- else %}
91
+ {{- raise_exception('Only text chunks are supported in assistant message contents.') }}
92
+ {%- endif %}
93
+ {%- endfor %}
94
+ {%- endif %}
95
+
96
+ {%- if message['tool_calls'] is defined and message['tool_calls'] is not none and message['tool_calls']|length > 0 %}
97
+ {%- for tool in message['tool_calls'] %}
98
+ {%- set arguments = tool['function']['arguments'] %}
99
+ {%- if arguments is not string %}
100
+ {%- set arguments = arguments|tojson|safe %}
101
+ {%- elif arguments == '' %}
102
+ {%- set arguments = '{}' %}
103
+ {%- endif %}
104
+ {{- '[TOOL_CALLS]' + tool['function']['name'] + '[ARGS]' + arguments }}
105
+ {%- endfor %}
106
+ {%- endif %}
107
+
108
+ {#- End of sequence token for each assistant messages. #}
109
+ {{- eos_token }}
110
+
111
+ {#- Tool messages only supports text content. #}
112
+ {%- elif message['role'] == 'tool' %}
113
+ {{- '[TOOL_RESULTS]' + message['content']|string + '[/TOOL_RESULTS]' }}
114
+
115
+ {#- Raise exception for unsupported roles. #}
116
+ {%- else %}
117
+ {{- raise_exception('Only user, assistant and tool roles are supported, got ' + message['role']) }}
118
+ {%- endif %}
119
+ {%- endfor %}
120
+
121
+ {#- Copyright 2025-present Unsloth. Apache 2.0 License. #}
config.json ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "Mistral3ForConditionalGeneration"
4
+ ],
5
+ "bos_token_id": 1,
6
+ "dtype": "float16",
7
+ "eos_token_id": 2,
8
+ "image_token_index": 10,
9
+ "model_name": "unsloth/ministral-3-8b-base-2512",
10
+ "model_type": "mistral3",
11
+ "multimodal_projector_bias": false,
12
+ "pad_token_id": 11,
13
+ "projector_hidden_act": "gelu",
14
+ "spatial_merge_size": 2,
15
+ "text_config": {
16
+ "attention_dropout": 0.0,
17
+ "bos_token_id": 1,
18
+ "dtype": "float16",
19
+ "eos_token_id": 2,
20
+ "head_dim": 128,
21
+ "hidden_act": "silu",
22
+ "hidden_size": 4096,
23
+ "initializer_range": 0.02,
24
+ "intermediate_size": 14336,
25
+ "max_position_embeddings": 262144,
26
+ "model_type": "ministral3",
27
+ "num_attention_heads": 32,
28
+ "num_hidden_layers": 34,
29
+ "num_key_value_heads": 8,
30
+ "pad_token_id": 11,
31
+ "rms_norm_eps": 1e-05,
32
+ "rope_parameters": {
33
+ "beta_fast": 32.0,
34
+ "beta_slow": 1.0,
35
+ "factor": 16.0,
36
+ "llama_4_scaling_beta": 0.1,
37
+ "mscale": 1.0,
38
+ "mscale_all_dim": 1.0,
39
+ "original_max_position_embeddings": 16384,
40
+ "rope_theta": 1000000.0,
41
+ "rope_type": "yarn",
42
+ "type": "yarn"
43
+ },
44
+ "sliding_window": null,
45
+ "tie_word_embeddings": false,
46
+ "use_cache": true,
47
+ "vocab_size": 131072
48
+ },
49
+ "tie_word_embeddings": false,
50
+ "transformers_version": "5.5.0",
51
+ "unsloth_fixed": true,
52
+ "unsloth_version": "2026.5.5",
53
+ "vision_config": {
54
+ "attention_dropout": 0.0,
55
+ "dtype": "float16",
56
+ "head_dim": 64,
57
+ "hidden_act": "silu",
58
+ "hidden_size": 1024,
59
+ "image_size": 1540,
60
+ "initializer_range": 0.02,
61
+ "intermediate_size": 4096,
62
+ "model_type": "pixtral",
63
+ "num_attention_heads": 16,
64
+ "num_channels": 3,
65
+ "num_hidden_layers": 24,
66
+ "patch_size": 14,
67
+ "rope_parameters": {
68
+ "rope_theta": 10000.0,
69
+ "rope_type": "default"
70
+ }
71
+ },
72
+ "vision_feature_layer": -1
73
+ }
dfk_hero_banner.png ADDED

Git LFS Details

  • SHA256: c3e2be7e4b21cd85ad410cf7edaf7d8f1fa71c84c96e2ca0aaa4fae173f17e70
  • Pointer size: 132 Bytes
  • Size of remote file: 2.1 MB
generation_config.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token_id": 1,
3
+ "eos_token_id": 2,
4
+ "max_length": 262144,
5
+ "pad_token_id": 11,
6
+ "transformers_version": "5.5.0"
7
+ }
metrics.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cls_accuracy": 0.9426699426699426,
3
+ "cls_precision_macro": 0.9207548385640022,
4
+ "cls_recall_macro": 0.9124577987183564,
5
+ "cls_f1_macro": 0.9163200926370609,
6
+ "cls_precision_weighted": 0.9430469381412777,
7
+ "cls_recall_weighted": 0.9426699426699426,
8
+ "cls_f1_weighted": 0.9425727615998175,
9
+ "cls_disinformasi_precision": 0.9460916442048517,
10
+ "cls_disinformasi_recall": 0.8954081632653061,
11
+ "cls_disinformasi_f1": 0.9200524246395806,
12
+ "cls_disinformasi_support": 392,
13
+ "cls_fitnah_precision": 0.8215962441314554,
14
+ "cls_fitnah_recall": 0.8215962441314554,
15
+ "cls_fitnah_f1": 0.8215962441314554,
16
+ "cls_fitnah_support": 213,
17
+ "cls_netral_precision": 0.9365079365079365,
18
+ "cls_netral_recall": 0.9731958762886598,
19
+ "cls_netral_f1": 0.9544994944388271,
20
+ "cls_netral_support": 970,
21
+ "cls_ujaran_kebencian_precision": 0.9788235294117648,
22
+ "cls_ujaran_kebencian_recall": 0.9596309111880046,
23
+ "cls_ujaran_kebencian_f1": 0.9691322073383809,
24
+ "cls_ujaran_kebencian_support": 867,
25
+ "bertscore_precision": 0.8043486475944519,
26
+ "bertscore_recall": 0.8009513020515442,
27
+ "bertscore_f1": 0.8023340702056885
28
+ }
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:577575622324b2e099e2648be26bdeb5e5815ffe66d7004e9e3ddbf421db6bf1
3
+ size 17078110
tokenizer_config.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": null,
3
+ "backend": "tokenizers",
4
+ "bos_token": "<s>",
5
+ "clean_up_tokenization_spaces": false,
6
+ "eos_token": "</s>",
7
+ "extra_special_tokens": [],
8
+ "is_local": false,
9
+ "model_max_length": 262144,
10
+ "model_specific_special_tokens": {},
11
+ "pad_token": "<pad>",
12
+ "padding_side": "left",
13
+ "processor_class": "PixtralProcessor",
14
+ "tokenizer_class": "TokenizersBackend",
15
+ "unk_token": "<unk>",
16
+ "use_default_system_prompt": false
17
+ }