Mehdi commited on
Commit
757dfee
Β·
1 Parent(s): 3f8b85e

chore: update blog to MiniCPM4.1-8B fine-tune + Sharing is Caring badge earned

Browse files
Files changed (2) hide show
  1. BLOG.md +2 -2
  2. blog/index.html +12 -12
BLOG.md CHANGED
@@ -26,7 +26,7 @@ Everything runs on free infrastructure with zero external API calls. No OpenAI k
26
  4. **A score ring** tracks your session in real time.
27
  5. **End the session** and FLUX.2-klein generates a unique image inspired by the topics you just studied β€” a small visual reward for showing up.
28
 
29
- The whole question-answer-feedback loop runs on **MiniCPM4-8B**, an open-weight 8B model, loaded once and shared between question generation and answer evaluation.
30
 
31
  ```
32
  PDF upload
@@ -153,7 +153,7 @@ Small prompt details made the difference between "tech demo" and "usable study t
153
 
154
  | Layer | Choice |
155
  |---|---|
156
- | Q&A + evaluation | MiniCPM4-8B (openbmb), bfloat16, transformers 4.57.1 |
157
  | Session images | FLUX.2-klein-4B (Black Forest Labs), diffusers |
158
  | PDF parsing | PyMuPDF |
159
  | Backend / hosting | Gradio 6 on Hugging Face Spaces, ZeroGPU |
 
26
  4. **A score ring** tracks your session in real time.
27
  5. **End the session** and FLUX.2-klein generates a unique image inspired by the topics you just studied β€” a small visual reward for showing up.
28
 
29
+ The whole question-answer-feedback loop runs on **MiniCPM4.1-8B**, our QLoRA fine-tune of openbmb's latest 8B model, loaded once and shared between question generation and answer evaluation.
30
 
31
  ```
32
  PDF upload
 
153
 
154
  | Layer | Choice |
155
  |---|---|
156
+ | Q&A + evaluation | MiniCPM4.1-8B (openbmb), QLoRA fine-tune, bfloat16, transformers 4.57.1 |
157
  | Session images | FLUX.2-klein-4B (Black Forest Labs), diffusers |
158
  | PDF parsing | PyMuPDF |
159
  | Backend / hosting | Gradio 6 on Hugging Face Spaces, ZeroGPU |
blog/index.html CHANGED
@@ -4,7 +4,7 @@
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>How We Fought Gradio and Won. PaperProf Field Notes</title>
7
- <meta name="description" content="Field notes from the Build Small Hackathon: building PaperProf, an AI study buddy running MiniCPM4-8B and FLUX.2-klein on ZeroGPU with a fully custom UI over a hidden-Gradio bridge.">
8
  <meta property="og:title" content="PaperProf Field Notes. How We Fought Gradio and Won">
9
  <meta property="og:description" content="68 commits, 10 days, zero external APIs. What we built and what we learned.">
10
  <meta property="og:type" content="article">
@@ -405,15 +405,15 @@ footer { position: relative; z-index: 1; max-width: 1060px; margin: 0 auto; padd
405
  <div class="hero-meta">
406
  <span>READ <b>9 min</b></span>
407
  <span>TEAM <b>PaperProf Β· EPITA</b></span>
408
- <span>STACK <b>MiniCPM4-8B / FLUX.2 / ZeroGPU</b></span>
409
  </div>
410
  <span class="scroll-hint">SCROLL</span>
411
  </header>
412
 
413
  <div class="marquee" aria-hidden="true">
414
  <div class="marquee-track">
415
- <span>MiniCPM4-8B</span><span>FLUX.2-klein</span><span>ZeroGPU</span><span>PyMuPDF</span><span>Gradio 6</span><span>Zero external APIs</span><span>68 commits</span><span>10 days</span>
416
- <span>MiniCPM4-8B</span><span>FLUX.2-klein</span><span>ZeroGPU</span><span>PyMuPDF</span><span>Gradio 6</span><span>Zero external APIs</span><span>68 commits</span><span>10 days</span>
417
  </div>
418
  </div>
419
 
@@ -436,13 +436,13 @@ footer { position: relative; z-index: 1; max-width: 1060px; margin: 0 auto; padd
436
  <div class="badge earned reveal">
437
  <span class="badge-icon">πŸ”Œ</span>
438
  <strong class="badge-name">Off the Grid</strong>
439
- <span class="badge-desc">Zero external APIs. MiniCPM4-8B and FLUX.2-klein run entirely on ZeroGPU β€” no OpenAI key, no rate limits, no data leaving the machine.</span>
440
  <span class="badge-chip">βœ“ Earned</span>
441
  </div>
442
  <div class="badge earned reveal">
443
  <span class="badge-icon">🎯</span>
444
  <strong class="badge-name">Well-Tuned</strong>
445
- <span class="badge-desc">QLoRA fine-tune on SQuAD via Modal. Model published on Hugging Face at <code>build-small-hackathon/MiniCPM4-8B-PaperProf</code>.</span>
446
  <span class="badge-chip">βœ“ Earned</span>
447
  </div>
448
  <div class="badge earned reveal">
@@ -454,7 +454,7 @@ footer { position: relative; z-index: 1; max-width: 1060px; margin: 0 auto; padd
454
  <div class="badge earned reveal">
455
  <span class="badge-icon">πŸ¦™</span>
456
  <strong class="badge-name">Llama Champion</strong>
457
- <span class="badge-desc">GGUF published at <code>build-small-hackathon/MiniCPM4-8B-PaperProf-GGUF</code>. llama.cpp CPU runtime wired in via <code>PAPERPROF_RUNTIME=llamacpp</code>.</span>
458
  <span class="badge-chip">βœ“ Earned</span>
459
  </div>
460
  <div class="badge earned reveal">
@@ -536,7 +536,7 @@ footer { position: relative; z-index: 1; max-width: 1060px; margin: 0 auto; padd
536
  <div class="card"><div class="glare"></div><span class="idx">REWARD</span><h4>Session image</h4><p>End the session and FLUX.2-klein generates a unique image from the topics you just studied.</p></div>
537
  </div>
538
 
539
- <p class="reveal">The whole loop runs on <strong>MiniCPM4-8B</strong>, an open-weight 8B model loaded once and shared between question generation and answer evaluation. PyMuPDF extracts the text, a chunker splits it into thematic sections, and the model picks up from there.</p>
540
 
541
  <section class="chapter reveal" id="real-story">
542
  <span class="ghost" aria-hidden="true">03</span>
@@ -553,9 +553,9 @@ footer { position: relative; z-index: 1; max-width: 1060px; margin: 0 auto; padd
553
 
554
  <h3 class="reveal" id="lesson-1">Model choice is a compatibility problem, not a benchmark problem</h3>
555
 
556
- <p class="reveal">We started with MiniCPM3-4B, upgraded to MiniCPM4-8B for better reasoning, and immediately hit the classic open-model trap: the model card says one thing, the <code>transformers</code> version on your machine says another.</p>
557
 
558
- <span class="commit reveal">fix: pin transformers==4.57.1 for MiniCPM4-8B compatibility</span>
559
 
560
  <p class="reveal">The follow-up lesson came from quantization. Bitsandbytes 4-bit is great on a 16 GB local GPU and completely unnecessary on ZeroGPU hardware, so we made it conditional:</p>
561
 
@@ -660,7 +660,7 @@ footer { position: relative; z-index: 1; max-width: 1060px; margin: 0 auto; padd
660
  <table>
661
  <thead><tr><th scope="col">Layer</th><th scope="col">Choice</th></tr></thead>
662
  <tbody>
663
- <tr><td><strong>Q&amp;A + evaluation</strong></td><td>MiniCPM4-8B (openbmb) Β· bfloat16 Β· transformers 4.57.1</td></tr>
664
  <tr><td><strong>Session images</strong></td><td>FLUX.2-klein-4B (Black Forest Labs) Β· diffusers</td></tr>
665
  <tr><td><strong>PDF parsing</strong></td><td>PyMuPDF</td></tr>
666
  <tr><td><strong>Backend / hosting</strong></td><td>Gradio 6 on Hugging Face Spaces Β· ZeroGPU</td></tr>
@@ -682,7 +682,7 @@ footer { position: relative; z-index: 1; max-width: 1060px; margin: 0 auto; padd
682
 
683
  <footer>
684
  <span>Build Small Hackathon Β· June 5–15, 2026</span>
685
- <span>MiniCPM4-8B / FLUX.2-klein / ZeroGPU / 0 external APIs</span>
686
  </footer>
687
 
688
  <script>
 
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>How We Fought Gradio and Won. PaperProf Field Notes</title>
7
+ <meta name="description" content="Field notes from the Build Small Hackathon: building PaperProf, an AI study buddy running MiniCPM4.1-8B and FLUX.2-klein on ZeroGPU with a fully custom UI over a hidden-Gradio bridge.">
8
  <meta property="og:title" content="PaperProf Field Notes. How We Fought Gradio and Won">
9
  <meta property="og:description" content="68 commits, 10 days, zero external APIs. What we built and what we learned.">
10
  <meta property="og:type" content="article">
 
405
  <div class="hero-meta">
406
  <span>READ <b>9 min</b></span>
407
  <span>TEAM <b>PaperProf Β· EPITA</b></span>
408
+ <span>STACK <b>MiniCPM4.1-8B fine-tune / FLUX.2 / ZeroGPU</b></span>
409
  </div>
410
  <span class="scroll-hint">SCROLL</span>
411
  </header>
412
 
413
  <div class="marquee" aria-hidden="true">
414
  <div class="marquee-track">
415
+ <span>MiniCPM4.1-8B fine-tune</span><span>FLUX.2-klein</span><span>ZeroGPU</span><span>PyMuPDF</span><span>Gradio 6</span><span>Zero external APIs</span><span>68 commits</span><span>10 days</span>
416
+ <span>MiniCPM4.1-8B fine-tune</span><span>FLUX.2-klein</span><span>ZeroGPU</span><span>PyMuPDF</span><span>Gradio 6</span><span>Zero external APIs</span><span>68 commits</span><span>10 days</span>
417
  </div>
418
  </div>
419
 
 
436
  <div class="badge earned reveal">
437
  <span class="badge-icon">πŸ”Œ</span>
438
  <strong class="badge-name">Off the Grid</strong>
439
+ <span class="badge-desc">Zero external APIs. MiniCPM4.1-8B and FLUX.2-klein run entirely on ZeroGPU β€” no OpenAI key, no rate limits, no data leaving the machine.</span>
440
  <span class="badge-chip">βœ“ Earned</span>
441
  </div>
442
  <div class="badge earned reveal">
443
  <span class="badge-icon">🎯</span>
444
  <strong class="badge-name">Well-Tuned</strong>
445
+ <span class="badge-desc">QLoRA fine-tune on SQuAD + SciQ via Modal. Model published at <code>build-small-hackathon/MiniCPM4.1-8B-PaperProf</code>.</span>
446
  <span class="badge-chip">βœ“ Earned</span>
447
  </div>
448
  <div class="badge earned reveal">
 
454
  <div class="badge earned reveal">
455
  <span class="badge-icon">πŸ¦™</span>
456
  <strong class="badge-name">Llama Champion</strong>
457
+ <span class="badge-desc">GGUF published at <code>build-small-hackathon/MiniCPM4.1-8B-PaperProf-GGUF</code>. llama.cpp CPU runtime wired in via <code>PAPERPROF_RUNTIME=llamacpp</code>.</span>
458
  <span class="badge-chip">βœ“ Earned</span>
459
  </div>
460
  <div class="badge earned reveal">
 
536
  <div class="card"><div class="glare"></div><span class="idx">REWARD</span><h4>Session image</h4><p>End the session and FLUX.2-klein generates a unique image from the topics you just studied.</p></div>
537
  </div>
538
 
539
+ <p class="reveal">The whole loop runs on <strong>MiniCPM4.1-8B</strong>, our QLoRA fine-tune of openbmb's latest 8B model, loaded once and shared between question generation and answer evaluation. PyMuPDF extracts the text, a chunker splits it into thematic sections, and the model picks up from there.</p>
540
 
541
  <section class="chapter reveal" id="real-story">
542
  <span class="ghost" aria-hidden="true">03</span>
 
553
 
554
  <h3 class="reveal" id="lesson-1">Model choice is a compatibility problem, not a benchmark problem</h3>
555
 
556
+ <p class="reveal">We started with MiniCPM3-4B, upgraded to MiniCPM4.1-8B for better reasoning, and immediately hit the classic open-model trap: the model card says one thing, the <code>transformers</code> version on your machine says another.</p>
557
 
558
+ <span class="commit reveal">fix: pin transformers==4.57.1 for MiniCPM4.1-8B compatibility</span>
559
 
560
  <p class="reveal">The follow-up lesson came from quantization. Bitsandbytes 4-bit is great on a 16 GB local GPU and completely unnecessary on ZeroGPU hardware, so we made it conditional:</p>
561
 
 
660
  <table>
661
  <thead><tr><th scope="col">Layer</th><th scope="col">Choice</th></tr></thead>
662
  <tbody>
663
+ <tr><td><strong>Q&amp;A + evaluation</strong></td><td>MiniCPM4.1-8B Β· QLoRA fine-tune (build-small-hackathon/MiniCPM4.1-8B-PaperProf) Β· bfloat16 Β· transformers 4.57.1</td></tr>
664
  <tr><td><strong>Session images</strong></td><td>FLUX.2-klein-4B (Black Forest Labs) Β· diffusers</td></tr>
665
  <tr><td><strong>PDF parsing</strong></td><td>PyMuPDF</td></tr>
666
  <tr><td><strong>Backend / hosting</strong></td><td>Gradio 6 on Hugging Face Spaces Β· ZeroGPU</td></tr>
 
682
 
683
  <footer>
684
  <span>Build Small Hackathon Β· June 5–15, 2026</span>
685
+ <span>MiniCPM4.1-8B / FLUX.2-klein / ZeroGPU / 0 external APIs</span>
686
  </footer>
687
 
688
  <script>