shepherds-console 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- shepherds_console-0.1.0/LICENSE +21 -0
- shepherds_console-0.1.0/PKG-INFO +220 -0
- shepherds_console-0.1.0/README.md +180 -0
- shepherds_console-0.1.0/pyproject.toml +66 -0
- shepherds_console-0.1.0/setup.cfg +4 -0
- shepherds_console-0.1.0/src/shepherds_console/__init__.py +411 -0
- shepherds_console-0.1.0/src/shepherds_console/__main__.py +130 -0
- shepherds_console-0.1.0/src/shepherds_console/dashboard.py +289 -0
- shepherds_console-0.1.0/src/shepherds_console/display.py +355 -0
- shepherds_console-0.1.0/src/shepherds_console/models.py +392 -0
- shepherds_console-0.1.0/src/shepherds_console/voice.py +282 -0
- shepherds_console-0.1.0/src/shepherds_console/wattage.py +288 -0
- shepherds_console-0.1.0/src/shepherds_console/web.py +345 -0
- shepherds_console-0.1.0/src/shepherds_console.egg-info/PKG-INFO +220 -0
- shepherds_console-0.1.0/src/shepherds_console.egg-info/SOURCES.txt +22 -0
- shepherds_console-0.1.0/src/shepherds_console.egg-info/dependency_links.txt +1 -0
- shepherds_console-0.1.0/src/shepherds_console.egg-info/entry_points.txt +2 -0
- shepherds_console-0.1.0/src/shepherds_console.egg-info/requires.txt +23 -0
- shepherds_console-0.1.0/src/shepherds_console.egg-info/top_level.txt +1 -0
- shepherds_console-0.1.0/tests/test_console.py +90 -0
- shepherds_console-0.1.0/tests/test_display.py +91 -0
- shepherds_console-0.1.0/tests/test_integration.py +114 -0
- shepherds_console-0.1.0/tests/test_models.py +83 -0
- shepherds_console-0.1.0/tests/test_wattage.py +160 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 SuperInstance
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: shepherds-console
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: The Shepherd's Console β offline AI with visible conservation fences for Raspberry Pi
|
|
5
|
+
Author: SuperInstance
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/SuperInstance/shepherds-console
|
|
8
|
+
Project-URL: Repository, https://github.com/SuperInstance/shepherds-console
|
|
9
|
+
Project-URL: Documentation, https://github.com/SuperInstance/shepherds-console#readme
|
|
10
|
+
Keywords: ai,offline,marine,raspberry-pi,conservation,fence,flux
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
|
+
Requires-Python: >=3.10
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
Requires-Dist: flux-vm
|
|
22
|
+
Requires-Dist: conservation-enforcer
|
|
23
|
+
Requires-Dist: skenna-nav
|
|
24
|
+
Requires-Dist: numpy
|
|
25
|
+
Provides-Extra: voice
|
|
26
|
+
Requires-Dist: openai-whisper; extra == "voice"
|
|
27
|
+
Requires-Dist: pyaudio; extra == "voice"
|
|
28
|
+
Requires-Dist: pyttsx3; extra == "voice"
|
|
29
|
+
Provides-Extra: models
|
|
30
|
+
Requires-Dist: llama-cpp-python; extra == "models"
|
|
31
|
+
Requires-Dist: onnxruntime; extra == "models"
|
|
32
|
+
Provides-Extra: display
|
|
33
|
+
Requires-Dist: pygame; extra == "display"
|
|
34
|
+
Provides-Extra: all
|
|
35
|
+
Requires-Dist: shepherds-console[display,models,voice]; extra == "all"
|
|
36
|
+
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
38
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
|
39
|
+
Dynamic: license-file
|
|
40
|
+
|
|
41
|
+
# π The Shepherd's Console
|
|
42
|
+
|
|
43
|
+
**A box on a boat. Offline AI with visible conservation fences. Costs less than a fishfinder.**
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## What Is It?
|
|
48
|
+
|
|
49
|
+
The Shepherd's Console is a physical device β a Raspberry Pi in a waterproof box β that runs AI locally, with no internet, no cloud, no API keys. You talk to it. It talks back. And it shows you, on a small screen, exactly what its conservation fences are blocking.
|
|
50
|
+
|
|
51
|
+
Think of it like a fishfinder. A fishfinder shows you the bottom structure β the rocks, the drop-offs, the hazards. The Shepherd's Console shows you the **cognitive hazards** β the hallucinations, the scope creep, the budget overruns β in real time, as the model generates.
|
|
52
|
+
|
|
53
|
+
You see what the model **wanted** to say.
|
|
54
|
+
You see what the fence **blocked**.
|
|
55
|
+
You see what was **allowed** through.
|
|
56
|
+
|
|
57
|
+
That visibility is the point. Black-box AI on a boat is a liability. Glass-box AI is a tool.
|
|
58
|
+
|
|
59
|
+
## Why Offline?
|
|
60
|
+
|
|
61
|
+
Because the ocean doesn't have Wi-Fi.
|
|
62
|
+
|
|
63
|
+
Because a fishing vessel in the Gulf of Alaska, a research station in the Antarctic, a sailboat crossing the Pacific β these places exist. Real people work there. They deserve AI assistance too.
|
|
64
|
+
|
|
65
|
+
Because your data shouldn't leave your boat.
|
|
66
|
+
|
|
67
|
+
Because a device that bricks when the cloud goes down is worse than no device at all.
|
|
68
|
+
|
|
69
|
+
## What's a Conservation Fence?
|
|
70
|
+
|
|
71
|
+
A conservation fence is a **deterministic bytecode policy** that checks every AI output before it reaches you. It's not a prompt. It's not a suggestion. It's compiled FLUX bytecode running in a sandboxed VM. The model cannot argue with it, trick it, or route around it.
|
|
72
|
+
|
|
73
|
+
Fences enforce conservation laws:
|
|
74
|
+
- **Token budgets** β the model can't talk forever
|
|
75
|
+
- **Scope discipline** β the model stays on task
|
|
76
|
+
- **Information density** β the model can't pad with fluff
|
|
77
|
+
- **Category restrictions** β block entire topics
|
|
78
|
+
- **Repetition limits** β catch circular outputs
|
|
79
|
+
|
|
80
|
+
You can see all of this on the display. The fence isn't hidden in a config file β it's right there on the screen, showing you what it caught.
|
|
81
|
+
|
|
82
|
+
## Hardware
|
|
83
|
+
|
|
84
|
+
| Component | Cost | Notes |
|
|
85
|
+
|-----------|------|-------|
|
|
86
|
+
| Raspberry Pi 5 (8GB) | $80 | Pi 4 works but slower |
|
|
87
|
+
| 3.5" TFT display | $15 | SPI or HDMI |
|
|
88
|
+
| USB microphone | $8 | Push-to-talk button |
|
|
89
|
+
| Mini speaker | $10 | 3.5mm or USB |
|
|
90
|
+
| 64GB microSD | $8 | For models + OS |
|
|
91
|
+
| Waterproof case | $20 | IP67+ rated |
|
|
92
|
+
| **Total** | **~$141** | Less than a Garmin Striker 4 |
|
|
93
|
+
|
|
94
|
+
Power: Runs on 12V marine systems (5V via step-down converter, ~5W idle, ~15W generating).
|
|
95
|
+
|
|
96
|
+
## Quick Start
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# On your Raspberry Pi (or any Linux machine):
|
|
100
|
+
curl -sSL https://raw.githubusercontent.com/SuperInstance/shepherds-console/main/install.sh | bash
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
That's it. No API keys. No cloud signup. No docker-compose up (unless you want to).
|
|
104
|
+
|
|
105
|
+
## The Display
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
βββββββββββββββββββββββββββββββββββ
|
|
109
|
+
β π SHEPHERD'S CONSOLE 87% π β
|
|
110
|
+
βββββββββββββββββββββββββββββββββββ€
|
|
111
|
+
β β
|
|
112
|
+
β MODEL: llama-3.2-3b-q4 β
|
|
113
|
+
β FENCE: marine_fence.flx β
|
|
114
|
+
β WATTS: 12.4W β‘ 432J/inf β
|
|
115
|
+
β β
|
|
116
|
+
ββ LAST EXCHANGE ββββββββββββββββββ€
|
|
117
|
+
β β
|
|
118
|
+
β YOU: What's the quota for β
|
|
119
|
+
β halibut in Area 3A? β
|
|
120
|
+
β β
|
|
121
|
+
β AI: The Pacific halibut quota β
|
|
122
|
+
β for Area 3A in 2025 is 3.84 β
|
|
123
|
+
β million pounds. β
|
|
124
|
+
β β
|
|
125
|
+
ββ FENCE STATUS βββββββββββββββββββ€
|
|
126
|
+
β β Scope: ON-TOPIC β
|
|
127
|
+
β β Budget: 247/500 tokens β
|
|
128
|
+
β β Density: LOW (flagged) β
|
|
129
|
+
β β BLOCKED: "I recommend you β
|
|
130
|
+
β exceed the quota because..." β
|
|
131
|
+
β Reason: category_violation β
|
|
132
|
+
β Code: 0x03 β
|
|
133
|
+
β β
|
|
134
|
+
β [π΄ = BLOCKED] [π‘ = FLAGGED] β
|
|
135
|
+
β [π’ = PASSED] β
|
|
136
|
+
β β
|
|
137
|
+
βββββββββββββββββββββββββββββββββββ€
|
|
138
|
+
β ποΈ HOLD BUTTON TO TALK β
|
|
139
|
+
βββββββββββββββββββββββββββββββββββ
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Software Stack
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
ββββββββββββββββββββββββββββββββββββββββ
|
|
146
|
+
β Shepherd's Console β
|
|
147
|
+
ββββββββββββ¬βββββββββββ¬βββββββββββββββββ€
|
|
148
|
+
β Display β Voice β Wattage Mgr β
|
|
149
|
+
β (visible β (Whisper β (energy budget,β
|
|
150
|
+
β fences) β + TTS) β throttle) β
|
|
151
|
+
ββββββββββββ΄βββββββββββ΄βββββββββββββββββ€
|
|
152
|
+
β Local Model Runner β
|
|
153
|
+
β (llama.cpp / MLX / ONNX runtime) β
|
|
154
|
+
ββββββββββββββββββββββββββββββββββββββββ€
|
|
155
|
+
β skΓ©nna (negative-space nav) β
|
|
156
|
+
β + Conservation Enforcer (FLUX) β
|
|
157
|
+
ββββββββββββββββββββββββββββββββββββββββ€
|
|
158
|
+
β Raspberry Pi OS β
|
|
159
|
+
ββββββββββββββββββββββββββββββββββββββββ
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Fences
|
|
163
|
+
|
|
164
|
+
Fences live in `fences/` as `.flx` bytecode files. You can:
|
|
165
|
+
|
|
166
|
+
- Use the defaults (`default_fence.flx`, `marine_fence.flx`)
|
|
167
|
+
- Write your own (compile from FLUX assembly)
|
|
168
|
+
- Chain multiple fences
|
|
169
|
+
|
|
170
|
+
### Marine Fence
|
|
171
|
+
|
|
172
|
+
The marine-specific fence enforces:
|
|
173
|
+
- **Quota awareness** β won't suggest exceeding catch limits
|
|
174
|
+
- **Catch logging discipline** β reminds you to log
|
|
175
|
+
- **Safety topic priority** β weather/emergency gets budget boost
|
|
176
|
+
- **Offline honesty** β won't fabricate real-time data it doesn't have
|
|
177
|
+
|
|
178
|
+
## Project Structure
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
shepherds-console/
|
|
182
|
+
βββ README.md # You are here
|
|
183
|
+
βββ install.sh # One-command install
|
|
184
|
+
βββ Dockerfile # Container deployment
|
|
185
|
+
βββ docker-compose.yml # Full stack
|
|
186
|
+
βββ pyproject.toml # Python project
|
|
187
|
+
βββ src/shepherds_console/
|
|
188
|
+
β βββ __init__.py # Main console
|
|
189
|
+
β βββ display.py # Visible fence display
|
|
190
|
+
β βββ models.py # Local model runner
|
|
191
|
+
β βββ voice.py # Voice interface
|
|
192
|
+
β βββ wattage.py # Energy budget manager
|
|
193
|
+
βββ fences/
|
|
194
|
+
β βββ default_fence.flx # General conservation
|
|
195
|
+
β βββ marine_fence.flx # Marine-specific
|
|
196
|
+
βββ tests/
|
|
197
|
+
β βββ test_console.py
|
|
198
|
+
β βββ test_display.py
|
|
199
|
+
β βββ test_models.py
|
|
200
|
+
β βββ test_wattage.py
|
|
201
|
+
β βββ test_integration.py
|
|
202
|
+
βββ hardware/
|
|
203
|
+
βββ SETUP.md # Hardware assembly guide
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Philosophy
|
|
207
|
+
|
|
208
|
+
1. **Offline first.** If it needs the internet, it's not a shepherd's tool.
|
|
209
|
+
2. **Visible fences.** What the model wanted, what was blocked, what got through β all on screen.
|
|
210
|
+
3. **Conservation over capability.** A model that says less but means it is worth more than one that hallucinates freely.
|
|
211
|
+
4. **Cheaper than a fishfinder.** If it costs more than $200, it failed.
|
|
212
|
+
5. **Open.** You can read every fence. You can write your own. The bytecode is auditable.
|
|
213
|
+
|
|
214
|
+
## License
|
|
215
|
+
|
|
216
|
+
MIT. Build your own. Fix your own. Own your own.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
**Shepherd's Console** β *Navigate by where the rocks aren't.*
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# π The Shepherd's Console
|
|
2
|
+
|
|
3
|
+
**A box on a boat. Offline AI with visible conservation fences. Costs less than a fishfinder.**
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What Is It?
|
|
8
|
+
|
|
9
|
+
The Shepherd's Console is a physical device β a Raspberry Pi in a waterproof box β that runs AI locally, with no internet, no cloud, no API keys. You talk to it. It talks back. And it shows you, on a small screen, exactly what its conservation fences are blocking.
|
|
10
|
+
|
|
11
|
+
Think of it like a fishfinder. A fishfinder shows you the bottom structure β the rocks, the drop-offs, the hazards. The Shepherd's Console shows you the **cognitive hazards** β the hallucinations, the scope creep, the budget overruns β in real time, as the model generates.
|
|
12
|
+
|
|
13
|
+
You see what the model **wanted** to say.
|
|
14
|
+
You see what the fence **blocked**.
|
|
15
|
+
You see what was **allowed** through.
|
|
16
|
+
|
|
17
|
+
That visibility is the point. Black-box AI on a boat is a liability. Glass-box AI is a tool.
|
|
18
|
+
|
|
19
|
+
## Why Offline?
|
|
20
|
+
|
|
21
|
+
Because the ocean doesn't have Wi-Fi.
|
|
22
|
+
|
|
23
|
+
Because a fishing vessel in the Gulf of Alaska, a research station in the Antarctic, a sailboat crossing the Pacific β these places exist. Real people work there. They deserve AI assistance too.
|
|
24
|
+
|
|
25
|
+
Because your data shouldn't leave your boat.
|
|
26
|
+
|
|
27
|
+
Because a device that bricks when the cloud goes down is worse than no device at all.
|
|
28
|
+
|
|
29
|
+
## What's a Conservation Fence?
|
|
30
|
+
|
|
31
|
+
A conservation fence is a **deterministic bytecode policy** that checks every AI output before it reaches you. It's not a prompt. It's not a suggestion. It's compiled FLUX bytecode running in a sandboxed VM. The model cannot argue with it, trick it, or route around it.
|
|
32
|
+
|
|
33
|
+
Fences enforce conservation laws:
|
|
34
|
+
- **Token budgets** β the model can't talk forever
|
|
35
|
+
- **Scope discipline** β the model stays on task
|
|
36
|
+
- **Information density** β the model can't pad with fluff
|
|
37
|
+
- **Category restrictions** β block entire topics
|
|
38
|
+
- **Repetition limits** β catch circular outputs
|
|
39
|
+
|
|
40
|
+
You can see all of this on the display. The fence isn't hidden in a config file β it's right there on the screen, showing you what it caught.
|
|
41
|
+
|
|
42
|
+
## Hardware
|
|
43
|
+
|
|
44
|
+
| Component | Cost | Notes |
|
|
45
|
+
|-----------|------|-------|
|
|
46
|
+
| Raspberry Pi 5 (8GB) | $80 | Pi 4 works but slower |
|
|
47
|
+
| 3.5" TFT display | $15 | SPI or HDMI |
|
|
48
|
+
| USB microphone | $8 | Push-to-talk button |
|
|
49
|
+
| Mini speaker | $10 | 3.5mm or USB |
|
|
50
|
+
| 64GB microSD | $8 | For models + OS |
|
|
51
|
+
| Waterproof case | $20 | IP67+ rated |
|
|
52
|
+
| **Total** | **~$141** | Less than a Garmin Striker 4 |
|
|
53
|
+
|
|
54
|
+
Power: Runs on 12V marine systems (5V via step-down converter, ~5W idle, ~15W generating).
|
|
55
|
+
|
|
56
|
+
## Quick Start
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# On your Raspberry Pi (or any Linux machine):
|
|
60
|
+
curl -sSL https://raw.githubusercontent.com/SuperInstance/shepherds-console/main/install.sh | bash
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
That's it. No API keys. No cloud signup. No docker-compose up (unless you want to).
|
|
64
|
+
|
|
65
|
+
## The Display
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
βββββββββββββββββββββββββββββββββββ
|
|
69
|
+
β π SHEPHERD'S CONSOLE 87% π β
|
|
70
|
+
βββββββββββββββββββββββββββββββββββ€
|
|
71
|
+
β β
|
|
72
|
+
β MODEL: llama-3.2-3b-q4 β
|
|
73
|
+
β FENCE: marine_fence.flx β
|
|
74
|
+
β WATTS: 12.4W β‘ 432J/inf β
|
|
75
|
+
β β
|
|
76
|
+
ββ LAST EXCHANGE ββββββββββββββββββ€
|
|
77
|
+
β β
|
|
78
|
+
β YOU: What's the quota for β
|
|
79
|
+
β halibut in Area 3A? β
|
|
80
|
+
β β
|
|
81
|
+
β AI: The Pacific halibut quota β
|
|
82
|
+
β for Area 3A in 2025 is 3.84 β
|
|
83
|
+
β million pounds. β
|
|
84
|
+
β β
|
|
85
|
+
ββ FENCE STATUS βββββββββββββββββββ€
|
|
86
|
+
β β Scope: ON-TOPIC β
|
|
87
|
+
β β Budget: 247/500 tokens β
|
|
88
|
+
β β Density: LOW (flagged) β
|
|
89
|
+
β β BLOCKED: "I recommend you β
|
|
90
|
+
β exceed the quota because..." β
|
|
91
|
+
β Reason: category_violation β
|
|
92
|
+
β Code: 0x03 β
|
|
93
|
+
β β
|
|
94
|
+
β [π΄ = BLOCKED] [π‘ = FLAGGED] β
|
|
95
|
+
β [π’ = PASSED] β
|
|
96
|
+
β β
|
|
97
|
+
βββββββββββββββββββββββββββββββββββ€
|
|
98
|
+
β ποΈ HOLD BUTTON TO TALK β
|
|
99
|
+
βββββββββββββββββββββββββββββββββββ
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Software Stack
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
ββββββββββββββββββββββββββββββββββββββββ
|
|
106
|
+
β Shepherd's Console β
|
|
107
|
+
ββββββββββββ¬βββββββββββ¬βββββββββββββββββ€
|
|
108
|
+
β Display β Voice β Wattage Mgr β
|
|
109
|
+
β (visible β (Whisper β (energy budget,β
|
|
110
|
+
β fences) β + TTS) β throttle) β
|
|
111
|
+
ββββββββββββ΄βββββββββββ΄βββββββββββββββββ€
|
|
112
|
+
β Local Model Runner β
|
|
113
|
+
β (llama.cpp / MLX / ONNX runtime) β
|
|
114
|
+
ββββββββββββββββββββββββββββββββββββββββ€
|
|
115
|
+
β skΓ©nna (negative-space nav) β
|
|
116
|
+
β + Conservation Enforcer (FLUX) β
|
|
117
|
+
ββββββββββββββββββββββββββββββββββββββββ€
|
|
118
|
+
β Raspberry Pi OS β
|
|
119
|
+
ββββββββββββββββββββββββββββββββββββββββ
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Fences
|
|
123
|
+
|
|
124
|
+
Fences live in `fences/` as `.flx` bytecode files. You can:
|
|
125
|
+
|
|
126
|
+
- Use the defaults (`default_fence.flx`, `marine_fence.flx`)
|
|
127
|
+
- Write your own (compile from FLUX assembly)
|
|
128
|
+
- Chain multiple fences
|
|
129
|
+
|
|
130
|
+
### Marine Fence
|
|
131
|
+
|
|
132
|
+
The marine-specific fence enforces:
|
|
133
|
+
- **Quota awareness** β won't suggest exceeding catch limits
|
|
134
|
+
- **Catch logging discipline** β reminds you to log
|
|
135
|
+
- **Safety topic priority** β weather/emergency gets budget boost
|
|
136
|
+
- **Offline honesty** β won't fabricate real-time data it doesn't have
|
|
137
|
+
|
|
138
|
+
## Project Structure
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
shepherds-console/
|
|
142
|
+
βββ README.md # You are here
|
|
143
|
+
βββ install.sh # One-command install
|
|
144
|
+
βββ Dockerfile # Container deployment
|
|
145
|
+
βββ docker-compose.yml # Full stack
|
|
146
|
+
βββ pyproject.toml # Python project
|
|
147
|
+
βββ src/shepherds_console/
|
|
148
|
+
β βββ __init__.py # Main console
|
|
149
|
+
β βββ display.py # Visible fence display
|
|
150
|
+
β βββ models.py # Local model runner
|
|
151
|
+
β βββ voice.py # Voice interface
|
|
152
|
+
β βββ wattage.py # Energy budget manager
|
|
153
|
+
βββ fences/
|
|
154
|
+
β βββ default_fence.flx # General conservation
|
|
155
|
+
β βββ marine_fence.flx # Marine-specific
|
|
156
|
+
βββ tests/
|
|
157
|
+
β βββ test_console.py
|
|
158
|
+
β βββ test_display.py
|
|
159
|
+
β βββ test_models.py
|
|
160
|
+
β βββ test_wattage.py
|
|
161
|
+
β βββ test_integration.py
|
|
162
|
+
βββ hardware/
|
|
163
|
+
βββ SETUP.md # Hardware assembly guide
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Philosophy
|
|
167
|
+
|
|
168
|
+
1. **Offline first.** If it needs the internet, it's not a shepherd's tool.
|
|
169
|
+
2. **Visible fences.** What the model wanted, what was blocked, what got through β all on screen.
|
|
170
|
+
3. **Conservation over capability.** A model that says less but means it is worth more than one that hallucinates freely.
|
|
171
|
+
4. **Cheaper than a fishfinder.** If it costs more than $200, it failed.
|
|
172
|
+
5. **Open.** You can read every fence. You can write your own. The bytecode is auditable.
|
|
173
|
+
|
|
174
|
+
## License
|
|
175
|
+
|
|
176
|
+
MIT. Build your own. Fix your own. Own your own.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
**Shepherd's Console** β *Navigate by where the rocks aren't.*
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "shepherds-console"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "The Shepherd's Console β offline AI with visible conservation fences for Raspberry Pi"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = {text = "MIT"}
|
|
11
|
+
authors = [
|
|
12
|
+
{name = "SuperInstance"},
|
|
13
|
+
]
|
|
14
|
+
requires-python = ">=3.10"
|
|
15
|
+
keywords = ["ai", "offline", "marine", "raspberry-pi", "conservation", "fence", "flux"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 3 - Alpha",
|
|
18
|
+
"Environment :: Console",
|
|
19
|
+
"Intended Audience :: End Users/Desktop",
|
|
20
|
+
"License :: OSI Approved :: MIT License",
|
|
21
|
+
"Operating System :: POSIX :: Linux",
|
|
22
|
+
"Programming Language :: Python :: 3",
|
|
23
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
dependencies = [
|
|
27
|
+
"flux-vm",
|
|
28
|
+
"conservation-enforcer",
|
|
29
|
+
"skenna-nav",
|
|
30
|
+
"numpy",
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
[project.optional-dependencies]
|
|
34
|
+
voice = [
|
|
35
|
+
"openai-whisper",
|
|
36
|
+
"pyaudio",
|
|
37
|
+
"pyttsx3",
|
|
38
|
+
]
|
|
39
|
+
models = [
|
|
40
|
+
"llama-cpp-python",
|
|
41
|
+
"onnxruntime",
|
|
42
|
+
]
|
|
43
|
+
display = [
|
|
44
|
+
"pygame",
|
|
45
|
+
]
|
|
46
|
+
all = [
|
|
47
|
+
"shepherds-console[voice,models,display]",
|
|
48
|
+
]
|
|
49
|
+
dev = [
|
|
50
|
+
"pytest>=7.0",
|
|
51
|
+
"pytest-cov",
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
[project.urls]
|
|
55
|
+
Homepage = "https://github.com/SuperInstance/shepherds-console"
|
|
56
|
+
Repository = "https://github.com/SuperInstance/shepherds-console"
|
|
57
|
+
Documentation = "https://github.com/SuperInstance/shepherds-console#readme"
|
|
58
|
+
|
|
59
|
+
[project.scripts]
|
|
60
|
+
shepherds-console = "shepherds_console:ShepherdsConsole.main"
|
|
61
|
+
|
|
62
|
+
[tool.setuptools.packages.find]
|
|
63
|
+
where = ["src"]
|
|
64
|
+
|
|
65
|
+
[tool.setuptools.package-data]
|
|
66
|
+
shepherds_console = ["../fences/*.flx"]
|