Deploy Forager's Field Station
Browse files- .claude/settings.local.json +27 -0
- .gitattributes +0 -6
- FIELD_NOTES.md +13 -10
- 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
|
| 33 |
-
|
| 34 |
-
Here's the failure, and it's a beautiful one. A deadly plant β say,
|
| 35 |
-
gets routed to "plant." My high-value forageables expert has never seen
|
| 36 |
-
its life, but it
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
|
|
|
|
|
|
|
|
|
| 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
|
| 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 |
+
[](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 |
```
|