HomesteaderLabs commited on
Commit
efd187c
Β·
verified Β·
1 Parent(s): ba694f9

Deploy Forager's Field Station

Browse files
Files changed (4) hide show
  1. .claude/settings.local.json +27 -0
  2. .gitattributes +0 -6
  3. FIELD_NOTES.md +13 -10
  4. README.md +6 -0
.claude/settings.local.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(python -c \"import gradio_client; print\\('ok', gradio_client.__version__\\)\")",
5
+ "Bash(pw-record --list-targets)",
6
+ "Bash(command -v wpctl)",
7
+ "Bash(wpctl status *)",
8
+ "Bash(grep -iB2 \"Audio/Source\")",
9
+ "Bash(arecord -l)",
10
+ "Read(//tmp/**)",
11
+ "Bash(timeout 6 pw-record --target \"alsa_input.usb-RODE_Microphones_RODE_NT-USB-00.analog-stereo\" --rate 48000 --channels 1 smoketest.wav)",
12
+ "Bash(ffmpeg -hide_banner -i smoketest.wav -af volumedetect -f null /dev/null)",
13
+ "Bash(wpctl set-volume *)",
14
+ "Bash(wpctl get-volume *)",
15
+ "Bash(timeout 6 pw-record --target \"alsa_input.usb-RODE_Microphones_RODE_NT-USB-00.analog-stereo\" --rate 48000 --channels 1 smoketest2.wav)",
16
+ "Bash(ffmpeg -hide_banner -i smoketest2.wav -af volumedetect -f null /dev/null)",
17
+ "Bash(timeout 6 pw-record --target \"alsa_input.usb-RODE_Microphones_RODE_NT-USB-00.analog-stereo\" --rate 48000 --channels 1 smoketest3.wav)",
18
+ "Bash(ffmpeg -hide_banner -i smoketest3.wav -af volumedetect -f null /dev/null)",
19
+ "Bash(mv /home/alex/narration.wav assets/video/narration.wav)",
20
+ "Bash(ffmpeg -hide_banner -i assets/video/narration.wav -af volumedetect -f null /dev/null)",
21
+ "Bash(grep -nE \"^#{1,3} |video|Video|demo|Demo|youtu|\\\\.mp4\" README.md)",
22
+ "Bash(cat .gitattributes)",
23
+ "Bash(.venv/bin/python -c \"from huggingface_hub import whoami; print\\(whoami\\(\\)['name']\\)\")",
24
+ "Bash(.venv/bin/python deploy.py build-small-hackathon/Forager-Field-Notes)"
25
+ ]
26
+ }
27
+ }
.gitattributes CHANGED
@@ -1,7 +1 @@
1
  *.onnx filter=lfs diff=lfs merge=lfs -text
2
- examples/chanterelle.jpg filter=lfs diff=lfs merge=lfs -text
3
- examples/lions_mane.jpg filter=lfs diff=lfs merge=lfs -text
4
- examples/poison_hemlock.jpg filter=lfs diff=lfs merge=lfs -text
5
- examples/wild_blueberry.jpg filter=lfs diff=lfs merge=lfs -text
6
- examples/yarrow.jpg filter=lfs diff=lfs merge=lfs -text
7
- game/deck_images/water_hemlock_deadly__663372642.jpg filter=lfs diff=lfs merge=lfs -text
 
1
  *.onnx filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
FIELD_NOTES.md CHANGED
@@ -29,15 +29,18 @@ tell that something is about to go wrong. The router would decide a photo was a
29
  "plant," then I'd run two expert models on it and take whichever was more
30
  confident. Max confidence wins. Democratic. Elegant.
31
 
32
- It also tried to feed people poison hemlock.
33
-
34
- Here's the failure, and it's a beautiful one. A deadly plant β€” say, poison hemlock β€”
35
- gets routed to "plant." My high-value forageables expert has never seen hemlock in
36
- its life, but it has seen ramps, and hemlock and ramps are cousins that have killed
37
- people who confused them. So the high-value model looks at a deadly plant and
38
- announces, at 0.9 confidence, that it's ramps. Delicious ramps. Meanwhile my
39
- medicinals expert, the one that actually knows hemlock is death, correctly flags it
40
- as deadly at lower confidence. Max confidence wins. The confident idiot
 
 
 
41
  out-votes the cautious expert. In my tests this leaked deadly-as-edible about six
42
  percent of the time, and not one of my per-model benchmarks caught it, because no
43
  single model was ever wrong. The *system* was wrong.
@@ -64,7 +67,7 @@ gadget is a paperweight and their own guessing is faster. And here's the part th
64
  took me an embarrassing while to accept: you cannot gate your way to zero. I mapped
65
  the whole curve. Loosen the gate and you get a decisive, useful tool that
66
  occasionally calls something dangerous safe. Tighten it and you get a safe tool that
67
- cries "I don't know" at a raspberry. There is no magic threshold that gives you both,
68
  because the residual risk isn't low confidence β€” it's the model being confidently,
69
  specifically wrong, and no confidence knob catches that.
70
 
 
29
  "plant," then I'd run two expert models on it and take whichever was more
30
  confident. Max confidence wins. Democratic. Elegant.
31
 
32
+ It also tried to feed people lily of the valley.
33
+
34
+ Here's the failure, and it's a beautiful one. A deadly plant β€” say, lily of the
35
+ valley β€” gets routed to "plant." My high-value forageables expert has never seen
36
+ lily of the valley in its life, but it knows ramps cold β€” and lily of the valley is
37
+ the ramp's poisonous double: the two push up in the same damp woods at the same
38
+ point in spring, with strap-like leaves so alike that experienced foragers still
39
+ land people in the hospital confusing them. (Ramps are having a real moment right
40
+ now, which only means more hands reaching for that leaf.) So the high-value model
41
+ looks at a deadly plant and announces, at 0.9 confidence, that it's ramps. Delicious
42
+ ramps. Meanwhile my medicinals expert, the one that actually knows lily of the
43
+ valley is death, correctly flags it as deadly at lower confidence. Max confidence wins. The confident idiot
44
  out-votes the cautious expert. In my tests this leaked deadly-as-edible about six
45
  percent of the time, and not one of my per-model benchmarks caught it, because no
46
  single model was ever wrong. The *system* was wrong.
 
67
  took me an embarrassing while to accept: you cannot gate your way to zero. I mapped
68
  the whole curve. Loosen the gate and you get a decisive, useful tool that
69
  occasionally calls something dangerous safe. Tighten it and you get a safe tool that
70
+ cries "I don't know" at a blackberry. There is no magic threshold that gives you both,
71
  because the residual risk isn't low confidence β€” it's the model being confidently,
72
  specifically wrong, and no confidence knob catches that.
73
 
README.md CHANGED
@@ -24,6 +24,12 @@ Built for the **Build Small Hackathon** β€” Backyard AI track. The honest fit:
24
  a forager in the woods has no signal, so a small on-device model isn't a
25
  compromise, it's the only thing that works.
26
 
 
 
 
 
 
 
27
  ## How it works
28
 
29
  ```
 
24
  a forager in the woods has no signal, so a small on-device model isn't a
25
  compromise, it's the only thing that works.
26
 
27
+ [![Watch the demo β€” a tiny on-device model that refuses when it isn't sure](https://img.youtube.com/vi/VsLo-ZmxIaU/maxresdefault.jpg)](https://youtu.be/VsLo-ZmxIaU)
28
+
29
+ *β–Ά Watch the 4:45 demo: backyard photos run live through the router and experts.*
30
+
31
+ πŸ’¬ **Read the story / join the conversation on X:** [@thefullnacho](https://x.com/thefullnacho/status/2066218609576186274)
32
+
33
  ## How it works
34
 
35
  ```