groove-dev 0.27.28 → 0.27.29
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.
- package/CLAUDE.md +7 -0
- package/node_modules/@groove-dev/cli/package.json +1 -1
- package/node_modules/@groove-dev/daemon/package.json +1 -1
- package/node_modules/@groove-dev/daemon/src/journalist.js +103 -45
- package/node_modules/@groove-dev/daemon/test/journalist.test.js +1 -1
- package/node_modules/@groove-dev/gui/dist/assets/{index-Ch1N9G4Z.js → index-CNsQ3n1t.js} +290 -290
- package/node_modules/@groove-dev/gui/dist/index.html +1 -1
- package/node_modules/@groove-dev/gui/package.json +1 -1
- package/node_modules/@groove-dev/gui/src/components/agents/agent-config.jsx +2 -2
- package/node_modules/@groove-dev/gui/src/views/settings.jsx +2 -2
- package/package.json +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/daemon/package.json +1 -1
- package/packages/daemon/src/journalist.js +103 -45
- package/packages/gui/dist/assets/{index-Ch1N9G4Z.js → index-CNsQ3n1t.js} +290 -290
- package/packages/gui/dist/index.html +1 -1
- package/packages/gui/package.json +1 -1
- package/packages/gui/src/components/agents/agent-config.jsx +2 -2
- package/packages/gui/src/views/settings.jsx +2 -2
- package/.groove-staging/state.json +0 -3
- package/.groove-staging/timeline.json +0 -13
- package/DECENTRALIZED_NET_WP_V1.md +0 -871
- package/decentralized-net/ACTION_PLAN.md +0 -422
|
@@ -1,422 +0,0 @@
|
|
|
1
|
-
Groove Decentralized Net — Layer 1 Action Plan
|
|
2
|
-
Proving the Inference Pipeline on a Local Network
|
|
3
|
-
================================================================================
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
HARDWARE MAP
|
|
7
|
-
================================================================================
|
|
8
|
-
|
|
9
|
-
Machine 1 — MacBook Air M1 (8GB)
|
|
10
|
-
Role: Consumer node / "phone simulator"
|
|
11
|
-
Runs: 1B-3B draft model for speculative decoding
|
|
12
|
-
Also runs: The orchestration layer (session init, relay logic)
|
|
13
|
-
Why: 8GB is too small for large model shards but perfect for testing the
|
|
14
|
-
consumer experience — this IS the phone equivalent
|
|
15
|
-
|
|
16
|
-
Machine 2 — iMac (TBD specs, likely M-series with 16-32GB)
|
|
17
|
-
Role: Compute Node A
|
|
18
|
-
Runs: First half of model layers (e.g., Layers 0-15 of a 32-layer model)
|
|
19
|
-
Why: Apple Silicon is fast at inference via MLX/llama.cpp
|
|
20
|
-
|
|
21
|
-
Machine 3 — GPU PC (TBD specs, likely NVIDIA with 8-24GB VRAM)
|
|
22
|
-
Role: Compute Node B
|
|
23
|
-
Runs: Second half of model layers (e.g., Layers 16-31)
|
|
24
|
-
Why: CUDA is the fastest inference runtime for NVIDIA hardware
|
|
25
|
-
|
|
26
|
-
Action item: Document the exact specs of each machine before starting.
|
|
27
|
-
Run on iMac: system_profiler SPHardwareDataType
|
|
28
|
-
Run on GPU PC: nvidia-smi (for GPU) + systeminfo or lscpu (for CPU/RAM)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
TECH STACK FOR THE POC
|
|
32
|
-
================================================================================
|
|
33
|
-
|
|
34
|
-
Language: Python 3.11+
|
|
35
|
-
Why: PyTorch, transformers, and all ML tooling is Python-native. The
|
|
36
|
-
production Groove daemon is Node.js, but the inference layer will always
|
|
37
|
-
be Python. No point fighting that.
|
|
38
|
-
|
|
39
|
-
Model Loading: HuggingFace transformers + PyTorch
|
|
40
|
-
Why: Full control over which layers load on which machine. You can
|
|
41
|
-
load a subset of layers by manipulating the model's state_dict.
|
|
42
|
-
Alternative: llama.cpp (faster on Apple Silicon, but harder to split
|
|
43
|
-
layers programmatically). We may migrate to llama.cpp in Sprint 3.
|
|
44
|
-
|
|
45
|
-
Networking: WebSocket (websockets library)
|
|
46
|
-
Why: Simple, bidirectional, low overhead for a local network PoC.
|
|
47
|
-
Production will use QUIC, but WebSocket proves the concept without
|
|
48
|
-
the complexity of QUIC NAT traversal on a LAN.
|
|
49
|
-
|
|
50
|
-
Serialization: msgpack or pickle for tensor transfer
|
|
51
|
-
Why: Hidden states are PyTorch tensors (~13KB per token for a 7B model).
|
|
52
|
-
msgpack is fast. Pickle works for trusted local network. We are NOT
|
|
53
|
-
doing JSON — binary tensors need binary serialization.
|
|
54
|
-
|
|
55
|
-
Draft Model: Qwen2.5-0.5B or SmolLM2-1.7B (quantized)
|
|
56
|
-
Why: Fits easily in 8GB on the MacBook Air. Good enough acceptance
|
|
57
|
-
rate for code tasks. Available on HuggingFace.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
MODEL SELECTION FOR POC
|
|
61
|
-
================================================================================
|
|
62
|
-
|
|
63
|
-
Start small, prove the architecture, then scale up.
|
|
64
|
-
|
|
65
|
-
Phase A model: Llama 3.1 8B (or Qwen2.5-7B)
|
|
66
|
-
- 32 transformer layers
|
|
67
|
-
- FP16: ~16GB, Q4: ~4.5GB
|
|
68
|
-
- Split across 2 nodes: ~2.3GB per node at Q4
|
|
69
|
-
- This is trivially small for your hardware — the point is proving
|
|
70
|
-
the sharding and pipeline work, not stressing the GPUs
|
|
71
|
-
|
|
72
|
-
Phase B model (after pipeline works): Llama 3.1 70B or Qwen2.5-32B
|
|
73
|
-
- 80 layers (70B) or 64 layers (32B)
|
|
74
|
-
- This is where you actually NEED sharding — a single consumer machine
|
|
75
|
-
can't hold the full model
|
|
76
|
-
- Split across 2 nodes: 35-40 layers each, ~20GB per node at Q4
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
PROJECT STRUCTURE
|
|
80
|
-
================================================================================
|
|
81
|
-
|
|
82
|
-
decentralized-net/
|
|
83
|
-
ACTION_PLAN.md — this file
|
|
84
|
-
DECENTRALIZED_NET_WP_V1.md — (symlink or copy from parent, reference only)
|
|
85
|
-
|
|
86
|
-
src/
|
|
87
|
-
node/ — compute node (runs on iMac + GPU PC)
|
|
88
|
-
server.py — WebSocket server, receives activations, runs layers, returns results
|
|
89
|
-
shard_loader.py — loads a specific layer range from a model
|
|
90
|
-
kv_cache.py — manages KV cache for assigned layers
|
|
91
|
-
|
|
92
|
-
consumer/ — consumer client (runs on MacBook Air)
|
|
93
|
-
client.py — session init, sends prompts, receives tokens
|
|
94
|
-
draft_model.py — local draft model for speculative decoding
|
|
95
|
-
speculative.py — speculative decode loop (generate candidates, verify, display)
|
|
96
|
-
|
|
97
|
-
relay/ — relay / orchestration (runs on MacBook Air for PoC)
|
|
98
|
-
relay.py — pipeline assembly, routing, session management
|
|
99
|
-
pipeline.py — manages the ordered list of nodes, activation forwarding
|
|
100
|
-
|
|
101
|
-
common/
|
|
102
|
-
protocol.py — message types, serialization, shared constants
|
|
103
|
-
tensor_transfer.py — efficient tensor packing/unpacking over WebSocket
|
|
104
|
-
|
|
105
|
-
tests/
|
|
106
|
-
test_shard_loading.py — verify a model can be split and reassembled
|
|
107
|
-
test_pipeline.py — verify activations flow correctly through 2 nodes
|
|
108
|
-
test_speculative.py — verify speculative decode acceptance logic
|
|
109
|
-
|
|
110
|
-
scripts/
|
|
111
|
-
start_node.sh — launch a compute node with specified layer range
|
|
112
|
-
start_consumer.sh — launch the consumer client
|
|
113
|
-
benchmark.py — measure tok/s, latency, acceptance rate
|
|
114
|
-
|
|
115
|
-
requirements.txt — torch, transformers, websockets, msgpack, etc.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
================================================================================
|
|
119
|
-
SPRINT 1 — Single Machine Baseline (2-3 days)
|
|
120
|
-
================================================================================
|
|
121
|
-
|
|
122
|
-
Goal: Load a model, run inference, measure baseline tok/s.
|
|
123
|
-
Machine: GPU PC (fastest single machine)
|
|
124
|
-
|
|
125
|
-
Tasks:
|
|
126
|
-
|
|
127
|
-
1.1 Set up Python environment
|
|
128
|
-
- Create venv, install torch + transformers + accelerate
|
|
129
|
-
- Verify CUDA works on GPU PC (torch.cuda.is_available())
|
|
130
|
-
- Verify MPS works on MacBook/iMac (torch.backends.mps.is_available())
|
|
131
|
-
|
|
132
|
-
1.2 Baseline inference benchmark
|
|
133
|
-
- Load Llama 3.1 8B (or Qwen2.5-7B) in Q4 on GPU PC
|
|
134
|
-
- Run 10 prompts, measure:
|
|
135
|
-
* Time to first token (TTFT)
|
|
136
|
-
* Tokens per second (sustained)
|
|
137
|
-
* Total generation time for 200 tokens
|
|
138
|
-
- Record these numbers — they are your ceiling. Distributed inference
|
|
139
|
-
will always be slower than this. The question is how much slower.
|
|
140
|
-
|
|
141
|
-
1.3 Understand the model internals
|
|
142
|
-
- Print model.config to see layer count, hidden_dim, num_heads
|
|
143
|
-
- Print model.model.layers to see the ModuleList of transformer layers
|
|
144
|
-
- Calculate hidden state size: hidden_dim * dtype_bytes
|
|
145
|
-
(e.g., 4096 * 2 = 8KB per token for a 7B model at fp16)
|
|
146
|
-
- This tells you exactly how much data transfers between nodes per token
|
|
147
|
-
|
|
148
|
-
1.4 Manual layer split test (single machine)
|
|
149
|
-
- Load only layers 0-15 on one model instance
|
|
150
|
-
- Load only layers 16-31 on another model instance
|
|
151
|
-
- Run a forward pass: input -> layers 0-15 -> capture hidden state ->
|
|
152
|
-
feed into layers 16-31 -> output logits
|
|
153
|
-
- Verify the output matches a full-model forward pass
|
|
154
|
-
- This proves the model CAN be split. If the hidden states don't match,
|
|
155
|
-
something is wrong with how layers are being loaded.
|
|
156
|
-
|
|
157
|
-
Deliverable: Baseline numbers + confirmed layer splitting works on one machine.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
================================================================================
|
|
161
|
-
SPRINT 2 — Two-Node Sharded Inference (3-5 days)
|
|
162
|
-
================================================================================
|
|
163
|
-
|
|
164
|
-
Goal: Run inference across two machines on the local network.
|
|
165
|
-
Machines: GPU PC (layers 0-15) + iMac (layers 16-31)
|
|
166
|
-
|
|
167
|
-
Tasks:
|
|
168
|
-
|
|
169
|
-
2.1 Build the compute node server (node/server.py)
|
|
170
|
-
- WebSocket server that:
|
|
171
|
-
* On startup: loads its assigned layer range
|
|
172
|
-
* On receiving ACTIVATIONS message: runs forward pass through its layers
|
|
173
|
-
* Returns: output hidden states (or logits if it's the final node)
|
|
174
|
-
- Command line: python server.py --model llama-8b --layers 0-15 --port 8765
|
|
175
|
-
|
|
176
|
-
2.2 Build the activation relay (common/tensor_transfer.py)
|
|
177
|
-
- Serialize PyTorch tensors to bytes efficiently
|
|
178
|
-
- Use torch.save() to BytesIO buffer, or raw .numpy().tobytes()
|
|
179
|
-
- Measure serialization overhead — should be <1ms for a 8KB tensor
|
|
180
|
-
- Deserialize on receiving end, move to correct device (CUDA/MPS/CPU)
|
|
181
|
-
|
|
182
|
-
2.3 Build a simple consumer client (consumer/client.py)
|
|
183
|
-
- Connects to Node A (GPU PC) and Node B (iMac) via WebSocket
|
|
184
|
-
- Sends tokenized prompt to Node A
|
|
185
|
-
- Node A processes layers 0-15, sends hidden states to Node B
|
|
186
|
-
(for now, routed through the consumer — direct P2P comes later)
|
|
187
|
-
- Node B processes layers 16-31, sends logits back to consumer
|
|
188
|
-
- Consumer samples next token, repeats
|
|
189
|
-
|
|
190
|
-
2.4 Run the 2-node pipeline
|
|
191
|
-
- Start server.py on GPU PC (layers 0-15)
|
|
192
|
-
- Start server.py on iMac (layers 16-31)
|
|
193
|
-
- Run client.py on MacBook Air
|
|
194
|
-
- Generate 200 tokens, measure:
|
|
195
|
-
* TTFT
|
|
196
|
-
* Tok/s
|
|
197
|
-
* Per-hop latency (time for hidden state transfer)
|
|
198
|
-
* Compare to Sprint 1 baseline
|
|
199
|
-
|
|
200
|
-
2.5 Implement basic pipeline parallelism
|
|
201
|
-
- Modify the consumer to send token N+1's hidden states to Node A
|
|
202
|
-
while Node B is still processing token N
|
|
203
|
-
- This is the pipelining from Section 4.1 of the whitepaper
|
|
204
|
-
- Measure throughput improvement vs. sequential
|
|
205
|
-
|
|
206
|
-
Expected results:
|
|
207
|
-
- Sequential 2-node: 3-5 tok/s (down from 15-30 baseline, network overhead)
|
|
208
|
-
- Pipelined 2-node: 5-10 tok/s (pipeline fills, bounded by slower node)
|
|
209
|
-
- On a local LAN, hop latency should be 1-3ms — much better than internet
|
|
210
|
-
|
|
211
|
-
Deliverable: Working 2-node inference with measurable pipeline parallelism gain.
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
================================================================================
|
|
215
|
-
SPRINT 3 — Three-Node Pipeline (2-3 days)
|
|
216
|
-
================================================================================
|
|
217
|
-
|
|
218
|
-
Goal: Full 3-node pipeline matching the whitepaper architecture.
|
|
219
|
-
Machines: MacBook Air (consumer) + iMac (layers 0-15) + GPU PC (layers 16-31)
|
|
220
|
-
|
|
221
|
-
Tasks:
|
|
222
|
-
|
|
223
|
-
3.1 Direct node-to-node activation transfer
|
|
224
|
-
- Currently activations route through the consumer (star topology)
|
|
225
|
-
- Change to: Node A sends directly to Node B (chain topology)
|
|
226
|
-
- Node A needs to know Node B's address — the consumer tells both
|
|
227
|
-
nodes the full pipeline at session start
|
|
228
|
-
- This halves the network hops for activation transfer
|
|
229
|
-
|
|
230
|
-
3.2 Build the relay/pipeline manager (relay/pipeline.py)
|
|
231
|
-
- Assembles the pipeline: which node runs which layers
|
|
232
|
-
- Sends PIPELINE_CONFIG to each node at session start
|
|
233
|
-
- Monitors heartbeats from each node
|
|
234
|
-
- For now, runs on the MacBook Air alongside the consumer
|
|
235
|
-
|
|
236
|
-
3.3 Three-node inference
|
|
237
|
-
- Split the 32-layer model into 3 shards:
|
|
238
|
-
* iMac: Layers 0-10
|
|
239
|
-
* GPU PC: Layers 11-21
|
|
240
|
-
* MacBook Air: Layers 22-31 (small shard, fits in 8GB)
|
|
241
|
-
OR if MacBook Air can't hold layers, use it as pure consumer
|
|
242
|
-
and split between iMac and GPU PC only (2 compute + 1 consumer)
|
|
243
|
-
- Run full pipeline with 3 participants
|
|
244
|
-
- Measure throughput vs 2-node pipeline
|
|
245
|
-
|
|
246
|
-
3.4 Benchmark suite (scripts/benchmark.py)
|
|
247
|
-
- Automated benchmark that tests:
|
|
248
|
-
* Single node baseline
|
|
249
|
-
* 2-node sequential
|
|
250
|
-
* 2-node pipelined
|
|
251
|
-
* 3-node pipelined
|
|
252
|
-
- Outputs a comparison table with TTFT, tok/s, per-hop latency
|
|
253
|
-
- This becomes the evidence that Layer 1 works
|
|
254
|
-
|
|
255
|
-
Deliverable: 3-node pipeline running, benchmark comparison table.
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
================================================================================
|
|
259
|
-
SPRINT 4 — Speculative Decoding (3-5 days)
|
|
260
|
-
================================================================================
|
|
261
|
-
|
|
262
|
-
Goal: Add the draft model on the MacBook Air, prove the speed multiplier.
|
|
263
|
-
This is the "secret weapon" from the whitepaper.
|
|
264
|
-
|
|
265
|
-
Tasks:
|
|
266
|
-
|
|
267
|
-
4.1 Load draft model on MacBook Air (consumer/draft_model.py)
|
|
268
|
-
- Load Qwen2.5-0.5B or SmolLM2-1.7B quantized to 4-bit
|
|
269
|
-
- Verify it runs on the M1 with MPS backend
|
|
270
|
-
- Measure draft generation speed (should be 50-100+ tok/s locally)
|
|
271
|
-
|
|
272
|
-
4.2 Implement speculative decode loop (consumer/speculative.py)
|
|
273
|
-
- Draft model generates N candidate tokens
|
|
274
|
-
- All N candidates sent to the pipeline in a single batch
|
|
275
|
-
- Pipeline processes all N tokens in one forward pass
|
|
276
|
-
- Final node returns: acceptance mask + correction token
|
|
277
|
-
- Consumer accepts matching tokens, restarts from correction
|
|
278
|
-
|
|
279
|
-
4.3 Verification logic on the final compute node
|
|
280
|
-
- Receives N candidate tokens + the prompt
|
|
281
|
-
- Runs a single forward pass for all positions
|
|
282
|
-
- Compares model's token distribution at each position to the
|
|
283
|
-
candidate token
|
|
284
|
-
- Returns: number of accepted tokens + first corrected token
|
|
285
|
-
- Standard speculative decoding math (rejection sampling)
|
|
286
|
-
|
|
287
|
-
4.4 Adaptive window sizing
|
|
288
|
-
- Track acceptance rate over a rolling window of 10 verification rounds
|
|
289
|
-
- Expand window (N=12) when acceptance > 80%
|
|
290
|
-
- Shrink window (N=4) when acceptance < 50%
|
|
291
|
-
- Default window: N=8
|
|
292
|
-
|
|
293
|
-
4.5 Full stack benchmark
|
|
294
|
-
- Run the 3-node pipeline WITH speculative decoding
|
|
295
|
-
- Compare to 3-node pipeline WITHOUT speculative decoding
|
|
296
|
-
- Measure:
|
|
297
|
-
* Effective tok/s (accepted tokens per second of wall time)
|
|
298
|
-
* Acceptance rate per domain (try code prompts vs. creative prompts)
|
|
299
|
-
* Overhead of draft model generation on MacBook Air
|
|
300
|
-
* Network round-trips saved
|
|
301
|
-
|
|
302
|
-
Expected results:
|
|
303
|
-
- Without speculative: 5-10 tok/s (from Sprint 3)
|
|
304
|
-
- With speculative (70% acceptance): 12-20 tok/s
|
|
305
|
-
- Code-specific prompts should see higher acceptance than creative
|
|
306
|
-
|
|
307
|
-
Deliverable: Speculative decoding working, measured speed multiplier,
|
|
308
|
-
acceptance rate data across prompt types.
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
================================================================================
|
|
312
|
-
SPRINT 5 — Hardening & KV Cache (3-5 days)
|
|
313
|
-
================================================================================
|
|
314
|
-
|
|
315
|
-
Goal: Handle failures and long conversations gracefully.
|
|
316
|
-
|
|
317
|
-
Tasks:
|
|
318
|
-
|
|
319
|
-
5.1 KV cache management per node
|
|
320
|
-
- Each node maintains KV cache for its layers across tokens
|
|
321
|
-
- Implement cache eviction when context window fills
|
|
322
|
-
- Test: run a 2000-token conversation, verify cache doesn't OOM
|
|
323
|
-
|
|
324
|
-
5.2 Node dropout handling
|
|
325
|
-
- Simulate Node B going offline mid-generation
|
|
326
|
-
- Consumer/relay detects via heartbeat timeout
|
|
327
|
-
- For PoC: restart the session (full re-prefill)
|
|
328
|
-
- Measure recovery time
|
|
329
|
-
- Later: implement standby promotion with KV cache streaming
|
|
330
|
-
|
|
331
|
-
5.3 Session resumption
|
|
332
|
-
- Consumer disconnects and reconnects
|
|
333
|
-
- Compute nodes still hold KV cache for the session (within TTL)
|
|
334
|
-
- Consumer resumes generation without re-prefill
|
|
335
|
-
- Test: disconnect for 30s, reconnect, verify continuity
|
|
336
|
-
|
|
337
|
-
5.4 Metrics dashboard
|
|
338
|
-
- Simple terminal UI or web page showing:
|
|
339
|
-
* Active pipeline topology
|
|
340
|
-
* Per-node GPU utilization
|
|
341
|
-
* Tok/s in real time
|
|
342
|
-
* Acceptance rate (if speculative decoding is on)
|
|
343
|
-
* Per-hop latency
|
|
344
|
-
- This becomes the foundation for the Groove GUI integration later
|
|
345
|
-
|
|
346
|
-
Deliverable: Resilient pipeline that handles failures, metrics visibility.
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
================================================================================
|
|
350
|
-
WHAT SUCCESS LOOKS LIKE
|
|
351
|
-
================================================================================
|
|
352
|
-
|
|
353
|
-
After Sprint 4, you should have hard data proving:
|
|
354
|
-
|
|
355
|
-
1. Model sharding works — a model split across 2-3 machines produces
|
|
356
|
-
identical output to the same model on one machine
|
|
357
|
-
|
|
358
|
-
2. Pipeline parallelism provides measurable throughput improvement —
|
|
359
|
-
2-3x over naive sequential, bounded by slowest node not sum of nodes
|
|
360
|
-
|
|
361
|
-
3. Speculative decoding provides measurable throughput improvement —
|
|
362
|
-
2-4x over non-speculative, with acceptance rates by domain
|
|
363
|
-
|
|
364
|
-
4. The full stack (sharding + pipeline + speculative) achieves
|
|
365
|
-
production-viable throughput — targeting 12-20 tok/s on a LAN,
|
|
366
|
-
which maps to 5-10 tok/s over internet (the "average case" from
|
|
367
|
-
the whitepaper)
|
|
368
|
-
|
|
369
|
-
This data is what turns the whitepaper from a thesis into a proof.
|
|
370
|
-
Every claim in the whitepaper Section 13 (Performance Expectations)
|
|
371
|
-
should be backed by real measurements from your 3-machine testbed.
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
================================================================================
|
|
375
|
-
WHAT COMES AFTER LAYER 1
|
|
376
|
-
================================================================================
|
|
377
|
-
|
|
378
|
-
Once Layer 1 is proven on the local network:
|
|
379
|
-
|
|
380
|
-
Layer 2 — Relay Network:
|
|
381
|
-
Move from hardcoded pipeline (you manually assign layers to machines)
|
|
382
|
-
to dynamic discovery via DHT. Implement the relay node as a separate
|
|
383
|
-
process. Test with machines on different networks (Tailscale).
|
|
384
|
-
|
|
385
|
-
Layer 3 — Proof & Settlement:
|
|
386
|
-
Implement proof of compute generation. Deploy $GROOVE token contract
|
|
387
|
-
on Base testnet. Wire up escrow and batch settlement.
|
|
388
|
-
|
|
389
|
-
Layer 4 — Training Loop:
|
|
390
|
-
Start capturing inference traces. Build the federated fine-tuning
|
|
391
|
-
pipeline. Train Savant v0.1.
|
|
392
|
-
|
|
393
|
-
Integration with Groove:
|
|
394
|
-
The decentralized inference pipeline becomes a new provider in
|
|
395
|
-
packages/daemon/src/providers/ — "groove-net.js". Groove agents can
|
|
396
|
-
route to the decentralized network just like they route to Claude,
|
|
397
|
-
Codex, or Gemini today.
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
================================================================================
|
|
401
|
-
GETTING STARTED — LITERALLY THE FIRST COMMANDS
|
|
402
|
-
================================================================================
|
|
403
|
-
|
|
404
|
-
On the MacBook Air (your dev machine):
|
|
405
|
-
|
|
406
|
-
cd ~/Desktop/groove/decentralized-net
|
|
407
|
-
python3 -m venv venv
|
|
408
|
-
source venv/bin/activate
|
|
409
|
-
pip install torch transformers accelerate websockets msgpack
|
|
410
|
-
|
|
411
|
-
mkdir -p src/{node,consumer,relay,common} tests scripts
|
|
412
|
-
|
|
413
|
-
# Verify PyTorch works with MPS
|
|
414
|
-
python3 -c "import torch; print(torch.backends.mps.is_available())"
|
|
415
|
-
|
|
416
|
-
# Download a small model to start
|
|
417
|
-
python3 -c "from transformers import AutoModelForCausalLM, AutoTokenizer; \
|
|
418
|
-
AutoModelForCausalLM.from_pretrained('Qwen/Qwen2.5-0.5B'); \
|
|
419
|
-
AutoTokenizer.from_pretrained('Qwen/Qwen2.5-0.5B')"
|
|
420
|
-
|
|
421
|
-
Then start Sprint 1, Task 1.2 — run a baseline benchmark on your fastest
|
|
422
|
-
machine.
|