This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle

What I Built

In Week 1, an open robot model (SmolVLA) packed my picnic only when I used its exact training sentence. This week I fine-tuned it on a few demos, each labeled with the ways people actually ask, and priced the fix.

For the price of a coffee, the robot learned how I talk.

Before After 1 demo per item
Phrasings I taught 31% 80%
Phrasings it never saw 29% 78%
Demos needed 4 in total
GPU cost about $1.50

Who would pay: anyone whose robot meets people who did not write its training data.

Customer What they say What they get
Café with a kitchen arm "grab me the oat milk" A model that understands the staff
Care home "could you get my cup?" A robot that does not need exact commands
Robot vendor abroad Their customers' dialect A fine-tune per market, priced per job

Demo

Four picnic items before and after fine-tuning with one demo per item

Upper clip of each pair: the published model. Lower clip: after one demo per item, same scene.

Rows Request
Top two "pack the {item} for our picnic" (taught)
Bottom two "the basket still needs the {item}" (never seen in training)

The results

Six fine-tuned models (1 to 40 demos per item) plus the published one, all tested on the same 420 episodes.

Test success against demos per item

Demos per item Taught Never seen Original sentence 6 untrained items
0 (published) 31% 29% 100% 87%
1 80% 78% 95% 60%
3 86% 74% 90% 70%
5 84% 74% 88% 70%
10 86% 77% 92% 72%
20 92% 79% 98% 68%
40 92% 78% 98% 68%

1. One demo per item does most of the work

Successes out of 40 per phrasing

Phrasing 0 demos 1 demo
A ● grab the {item} and put it in the basket 23/40 35/40
B ● {item} in the basket 3/40 29/40
C ● pack the {item} for our picnic 1/40 31/40
D ● could you put the {item} in the picnic basket? 23/40 33/40
E ○ toss the {item} into the basket 8/40 33/40
F ○ the basket still needs the {item} 7/40 25/40
G ○ can you get the {item} into the basket for me? 18/40 32/40
H ○ move the {item} over to the basket 13/40 34/40

E to H were frozen before training, under rules that ban the verbs and sentence shapes of A to D.

2. The twist: more demos did not help with new words

1 demo 40 demos
Taught phrasings 80% 92%
Never-seen phrasings 78% 78%
Orange juice, never-seen 36/40 23/40

Orange juice with a new phrasing at 1, 10, 20, and 40 demos per item

Same scene, same request. Likely reason: every demo carried the same five sentences, so more demos taught more ways to move, not more ways to be asked. One training run per N and cream cheese went the other way, so this is a strong hint, not a proof (see also VLA or IL? by @fn8211).

Lesson for the side hustle: collect more phrasings, not more demos.

3. The fine print: it forgets what it was not taught

Butter (trained) and ketchup (not trained), before and after fine-tuning

Original sentence 0 demos 1 to 40 demos
4 trained items 100% 88-98%
6 untrained items 87% 60-72%

The fine-tune only saw four items, so the model drifted toward them. Ketchup, the first item my robot ever packed in Week 1, still works in 6 to 8 of 10 scenes, but loses this one. Next fix to try: mix in a few demos of every item.

What It Costs

Time Money
One fine-tune (shared GPU, 3000 steps) 48 min $1.50
One fine-tune (GPU alone, 1000 steps, estimated) 10 min $0.30
Whole experiment (6 models, about 4,400 evaluation episodes) 6 h $11
Buying the GPU instead $10,000+

Validation stopped improving after step 1000 for 3+ demos per item (training chart below), so a real job can stop early.

How I Built It

Part Choice
Model lerobot/smolvla_libero, 450M parameters
Data Public lerobot/libero demos, first N per item, 4 items
The trick A wrapper around lerobot-train relabels each sample with one of 5 sentences at random; no new recordings
Training Whole model, 3000 steps, batch 32, lr 2.5e-5
Checkpoint choice Best of steps 1000/2000/3000 on held-out scenes, taught phrasings only
Test 420 episodes per model, LIBERO-Object in MuJoCo, same scenes and seeds for all
Hardware 1x A100 80 GB on RunPod, training and evaluation side by side in tmux

Training loss and validation success

Gotcha: the pod showed 256 CPUs but had 16; evaluation threads starved training until I set OMP_NUM_THREADS=1 (setup guide).

Limits: one training run per N; simulation only; phrasing G turned out closer to D than my rules intended.

Code

GitHub logo johyeongseob / hacktoberfest-2026

Hacktoberfest 2026 projects and experiments focused on open-weight AI, VLA, and Physical AI.

Hacktoberfest 2026

A month-long exploration of open-weight AI, VLA, and Physical AI.

Goals

  • Explore open-weight AI models
  • Build VLA/Physical AI projects
  • Participate in DEV Challenges
  • Document experiments and learnings

Projects

hacktoberfest-2026/ ├── dev-challenge/ # Hacktoberfest DEV Challenge entries │ ├── weekend-challenge/ # Shared Workbench Reset Assistant (local open-weight VLM) │ ├── week-1/ # Picnic Packing with SmolVLA (paraphrased instructions in LIBERO) │ └── week-2/ # Teaching the Picnic Robot My Words (SmolVLA fine-tune on a rented GPU) ├── global-hack-week/ # Global Hack Week: Hacktoberfest challenge write-ups │ ├── 01-registration.md # Registration challenges │ └── github/ # GitHub challenges (Codespaces, repo management, Copilot) ├── devrelay/ # DevRelay usage notes and reviewed agent session transcripts └── models/ # Shared local model weights; excluded from Git 

Development Environment

Component Configuration
Host Windows
CPU Intel Core Ultra X7 358H; 16 logical CPUs visible in WSL
GPU Intel Arc B390 GPU; Windows driver 32.0.101.8356
RAM
…
Where What
dev-challenge/week-2 Relabeling wrapper, training and evaluation scripts, all tables, chart and video scripts
Hugging Face Hub All six fine-tuned models with a model card

Why Does Open Innovation Matter?

Open piece Why the business needs it
Open weights You cannot fine-tune what you cannot download
Open data I relabeled public demos instead of recording any
Open benchmark I could measure what one demo buys and what it breaks
Hourly GPUs + small model The customer pays for minutes, not a GPU or a per-call API
A model file The customer runs it offline on their own robot, free of anyone's pricing

No paying user yet. The first person I would show it to: anyone who has watched a robot arm ignore a perfectly reasonable request.

My Agent Session

I built this with Claude Code over a week. The session below is a curated slice: the experiment design, the GPU run and its one bug, the results, and the charts and videos.

Teaching a picnic robot new words: fine-tuning SmolVLA on a rented GPU (curated, translated)
You

[Note: condensed English translation of a Claude Code session held in Korean, October 12-18, 2026. Messages are selected and shortened; wording is translated, not verbatim.]

Week 2 is Side Hustle. Can we go beyond Week 1's inference and actually fine-tune SmolVLA? I want Weeks 2 to 4 to continue the picnic robot story, and I'd rather pick something that shows real VLA work than something safe.

Agent

Proposal: teach lerobot/smolvla_libero the four Week 1 phrasings that failed, with N demos per item, and measure success against N. The curve is a price list for a "fit the robot to how your users talk" service.

You

Isn't smolvla_libero already fine-tuned on LIBERO-Object? Wouldn't training and testing be the same thing?

Agent

It has seen every Object demo, but only with one sentence per task. What is new is the wording. Split: train on the first N demos per item relabeled with the original sentence and A to D; choose checkpoints on initial states 10 to 14; test on states 0 to 9; and add four unseen phrasings E to H that are only ever used in the test.

You

Write E to H.

Agent

Wrote E to H under fixed rules (none of the verbs pick, place, grab, put, pack; a sentence structure different from A to D; the basket stays the target) and froze them in data/wordings.json before any training.

You

Train on the four items with N = 1, 3, 5, 10, 20, 40. With the same number of steps, won't the small N runs overfit?

Agent

Every N gets the same 3000 steps (lr 2.5e-5, warmup 200, batch 32), and checkpoints are scored on the validation states while training runs, so overfitting would show up as a falling validation curve. The best checkpoint per N goes to the test.

You

Can one command run everything?

Agent

run_all.sh starts one tmux session: the N = 0 test, the training chain, one watcher per run, and a final waiter. A dry run with stub scripts caught two bugs before any GPU time: parallel jobs appending to one results file corrupted it (now one file per job, merged at the end), and results depended on job grouping (now the RNG is reseeded per episode).

▸ bash dry run of run_all.sh with stub training and evaluation scripts
$ dry run of run_all.sh with stub training and evaluation scripts
interleaved lines found in results.jsonl; after the fix, a clean rerun
You

DigitalOcean, the sponsor, won't let my new account create a GPU Droplet. What now?

Agent

A new account needs a $250 prepay or a support ticket that takes one to two business days. RunPod rents an A100 SXM 80 GB by the hour with prepaid credit, so I rewrote setup.md for a RunPod pod. On the pod, the smoke test (butter, original sentence) succeeded, and a 200-step training probe used 28 GB of GPU memory at 0.46 s per step.

You

Training is stuck at step 0.

Agent
▸ top CPU use on the pod
CPU use on the pod
evaluation processes at 400-600% CPU each

nproc reports the host's 256 CPUs, but the pod has 16 vCPU, so every evaluation process spawned hundreds of threads and starved training. Fix: OMP_NUM_THREADS=1 (and MKL, OpenBLAS) in the environment, then restart. To fit the time budget, validate at steps 1000, 2000, and 3000 only.

You

I'm going to close everything and turn off my laptop. Will it keep running?

Agent

Yes, the jobs live in tmux on the pod. Before leaving, check that training passed step 1000, the first checkpoint exists, no process is far above 100% CPU, and there is disk and credit left.

Agent

All six runs finished in about six hours and $11. Taught phrasings: 31% at N = 0, 80% at N = 1, 92% at N = 20 and 40. Unseen: 29% at N = 0, then 74-79% for every N. Six untrained items: 87% to 60-72%.

You

So unseen phrasings don't scale with N?

Agent

No. Per item it is mixed: cream cheese rises, orange juice falls from 36/40 to 23/40, and they cancel out. A likely reason: every demo carries the same five sentences, so more demos add ways to move, not ways to be asked. With one seed per N, it is a hypothesis.

You

The original sentence was in the training mix. Why do the other items still fail?

Agent

The original sentence was only there for the four trained items; the other six never appeared, so the whole model drifted toward the four. The checkpoint choice never looked at them, and even the step-1000 checkpoints forgot as much, so it happens early. Mixing in a few demos of every item is the fix to try next.

You

What is the most important result?

Agent

One demo per item does most of the work: that is the price, and the Side Hustle story. Then the twist (more demos do not help new phrasings) and the cost (forgetting).

You

Make video grids: the four items, a taught and an unseen phrasing, before and after one demo.

Agent
▸ make_grid.py items
items
4x4 grid: N = 0 fails in all 8 tiles, N = 1 succeeds in all 8

Scenes chosen by a rule: N = 0 fails and every fine-tuned model succeeds. Also a 1x4 orange juice grid (N = 1, 10, 20, 40) and a butter-versus-ketchup grid for forgetting.

You

In the line chart, use filled dots for what was taught and hollow dots for what wasn't, so it reads like the heatmap.

Agent

Filled now means "in the fine-tuning data" (the original sentence and A to D); hollow means not (E to H, and the six other items). Both charts use the same rule and legend.

You

Publish the models.

Agent

Wrote a short model card with the charts and the results table, uploaded it, and made the Hugging Face repo public with all six checkpoints.

You

Let's write the DEV post. Use DevRelay actively, and lean on figures, tables, and videos rather than text.

Agent

Pulled the Week 2 rules and judging criteria with get_challenge_details, checked another submission for the template, searched DEV for related posts (one on whether fine-tuning turns a VLA into an imitation learner), and staged the post as an unpublished draft. Rewrote it around tables, charts, and videos. This session is saved with submit_agent_session and embedded in the post.

Note: I worked with the agent in Korean. This is a condensed English translation of the key moments, not a verbatim transcript.

Disclosure: I designed the experiment, ran the training and every test episode, and reviewed every result. An AI coding agent helped write the scripts, drafted phrasings E to H under rules I set (I reviewed and froze them before training), analyzed the results, made the charts and videos, and drafted this post.