sync: 2026-03-16 18:00 — 21 files from Alexandria
Some checks failed
Lint & Format / detect (push) Has been cancelled
Lint & Format / js-lint (push) Has been cancelled
Lint & Format / py-lint (push) Has been cancelled
Lint & Format / sh-lint (push) Has been cancelled
Lint & Format / go-lint (push) Has been cancelled
Monorepo Lint / lint-shell (push) Has been cancelled
Monorepo Lint / lint-js (push) Has been cancelled
Some checks failed
Lint & Format / detect (push) Has been cancelled
Lint & Format / js-lint (push) Has been cancelled
Lint & Format / py-lint (push) Has been cancelled
Lint & Format / sh-lint (push) Has been cancelled
Lint & Format / go-lint (push) Has been cancelled
Monorepo Lint / lint-shell (push) Has been cancelled
Monorepo Lint / lint-js (push) Has been cancelled
RoadChain-SHA2048: c316572452cf6246 RoadChain-Identity: alexa@sovereign RoadChain-Full: c316572452cf6246294a9bf089ca177403d4187333252430e919cc2f55176f80722ae82807051dbc5772fa50a393bfc6ba5f1dc464d9ae0a435082d60da68a8f61c7521bc0fbc0509bf9e043035456b80763949d1e1e30cca278c3b264e78a417b62be8636feeda64580bd6eac8adede7fcb7c095eadc922a1057710484f98d08f347104bf31434f66ced3da243d480c58a4dfa0cc068ddfda54acadde593e3964f2a6ee69283eb62557638056c9e69be5cf70d8d9698b4c07f76c3f2d91e713cff5568eef41c51991648e8e28e2e0523cf04269cb5be393cae9250b285c968b97e330f5ddf91836d3f67555a147108c594274f1878fe4dc8f47ec4b2291b82f
This commit is contained in:
@@ -179,6 +179,7 @@ opusfile
|
|||||||
osx-cpu-temp
|
osx-cpu-temp
|
||||||
p11-kit
|
p11-kit
|
||||||
p7zip
|
p7zip
|
||||||
|
pandoc
|
||||||
pango
|
pango
|
||||||
pcre2
|
pcre2
|
||||||
perl
|
perl
|
||||||
|
|||||||
@@ -1,50 +1,50 @@
|
|||||||
[2026-03-16 17:10:02] [HEAL] [alice] Healed 1 services
|
[2026-03-16 17:40:04] [FLEET] [alice] cecilia: DOWN (no ping response)
|
||||||
[2026-03-16 17:10:04] [FLEET] [alice] cecilia: DOWN (no ping response)
|
[2026-03-16 17:40:06] [FLEET] [alice] gematria: UP temp=C mem=4174MB disk=68%
|
||||||
[2026-03-16 17:10:05] [FLEET] [alice] gematria: UP temp=C mem=4148MB disk=68%
|
[2026-03-16 17:40:07] [FLEET] [alice] lucidia: UP temp=53C mem=1121MB disk=33%
|
||||||
[2026-03-16 17:10:06] [FLEET] [alice] lucidia: UP temp=55C mem=1076MB disk=33%
|
[2026-03-16 17:40:09] [FLEET] [alice] aria: DOWN (no ping response)
|
||||||
[2026-03-16 17:10:08] [FLEET] [alice] aria: DOWN (no ping response)
|
[2026-03-16 17:40:10] [FLEET] [alice] anastasia: UP temp=C mem=318MB disk=69%
|
||||||
[2026-03-16 17:10:09] [FLEET] [alice] anastasia: UP temp=C mem=329MB disk=69%
|
[2026-03-16 17:41:01] [BEAT] [alice] load=0.93 mem=3277/3794MB temp=31.6C disk=83%
|
||||||
[2026-03-16 17:11:01] [BEAT] [alice] load=1.07 mem=3281/3794MB temp=32.1C disk=83%
|
[2026-03-16 17:42:01] [BEAT] [alice] load=0.90 mem=3268/3794MB temp=32.6C disk=83%
|
||||||
[2026-03-16 17:12:01] [BEAT] [alice] load=1.11 mem=3279/3794MB temp=31.6C disk=83%
|
[2026-03-16 17:43:01] [BEAT] [alice] load=0.58 mem=3277/3794MB temp=32.1C disk=83%
|
||||||
[2026-03-16 17:13:01] [BEAT] [alice] load=1.07 mem=3277/3794MB temp=32.1C disk=83%
|
[2026-03-16 17:44:01] [BEAT] [alice] load=0.78 mem=3277/3794MB temp=31.6C disk=83%
|
||||||
[2026-03-16 17:13:15] [BEAT] [alice] load=0.83 mem=3279/3794MB temp=32.1C disk=83%
|
[2026-03-16 17:44:07] [BEAT] [alice] load=1.12 mem=3279/3794MB temp=32.1C disk=83%
|
||||||
[2026-03-16 17:13:15] [BEAT] [alice] load=0.83 mem=3279/3794MB temp=31.2C disk=83%
|
[2026-03-16 17:44:07] [BEAT] [alice] load=1.12 mem=3279/3794MB temp=31.6C disk=83%
|
||||||
[2026-03-16 17:14:02] [BEAT] [alice] load=0.81 mem=3277/3794MB temp=32.1C disk=83%
|
[2026-03-16 17:45:01] [HEAL] [alice] Service blackroad-agent is DOWN — restarting
|
||||||
[2026-03-16 17:15:01] [BEAT] [alice] load=1.30 mem=3272/3794MB temp=32.1C disk=83%
|
[2026-03-16 17:45:01] [BEAT] [alice] load=0.62 mem=3269/3794MB temp=33.6C disk=83%
|
||||||
[2026-03-16 17:15:01] [HEAL] [alice] Service blackroad-agent is DOWN — restarting
|
[2026-03-16 17:45:01] [HEAL] [alice] Service blackroad-agent restarted successfully
|
||||||
[2026-03-16 17:15:01] [HEAL] [alice] Service blackroad-agent restarted successfully
|
[2026-03-16 17:45:02] [HEAL] [alice] Healed 1 services
|
||||||
[2026-03-16 17:15:02] [HEAL] [alice] Healed 1 services
|
[2026-03-16 17:45:47] [DIAL] [alice] Switchboard unreachable
|
||||||
[2026-03-16 17:15:46] [DIAL] [alice] Switchboard unreachable
|
[2026-03-16 17:46:01] [BEAT] [alice] load=0.88 mem=3275/3794MB temp=32.1C disk=83%
|
||||||
[2026-03-16 17:16:01] [BEAT] [alice] load=0.82 mem=3278/3794MB temp=31.2C disk=83%
|
[2026-03-16 17:46:41] [DIAL] [alice] Switchboard unreachable
|
||||||
[2026-03-16 17:16:40] [DIAL] [alice] Switchboard unreachable
|
[2026-03-16 17:47:01] [BEAT] [alice] load=1.18 mem=3282/3794MB temp=33.1C disk=83%
|
||||||
[2026-03-16 17:17:01] [BEAT] [alice] load=1.06 mem=3277/3794MB temp=32.6C disk=83%
|
[2026-03-16 17:48:01] [BEAT] [alice] load=1.08 mem=3277/3794MB temp=32.6C disk=83%
|
||||||
[2026-03-16 17:18:01] [BEAT] [alice] load=0.92 mem=3277/3794MB temp=31.2C disk=83%
|
[2026-03-16 17:49:01] [BEAT] [alice] load=0.78 mem=3260/3794MB temp=34.1C disk=83%
|
||||||
[2026-03-16 17:18:24] [BEAT] [alice] load=1.11 mem=3274/3794MB temp=33.1C disk=83%
|
[2026-03-16 17:49:16] [BEAT] [alice] load=1.06 mem=3274/3794MB temp=34.1C disk=83%
|
||||||
[2026-03-16 17:18:24] [BEAT] [alice] load=1.11 mem=3271/3794MB temp=35.0C disk=83%
|
[2026-03-16 17:49:16] [BEAT] [alice] load=1.06 mem=3274/3794MB temp=34.1C disk=83%
|
||||||
[2026-03-16 17:19:01] [BEAT] [alice] load=1.48 mem=3278/3794MB temp=31.6C disk=83%
|
[2026-03-16 17:50:02] [FLEET] [alice] Starting cross-node health check
|
||||||
[2026-03-16 17:20:01] [FLEET] [alice] Starting cross-node health check
|
[2026-03-16 17:50:02] [HEAL] [alice] Service blackroad-agent is DOWN — restarting
|
||||||
[2026-03-16 17:20:01] [HEAL] [alice] Service blackroad-agent is DOWN — restarting
|
[2026-03-16 17:50:02] [BEAT] [alice] load=0.81 mem=3252/3794MB temp=34.1C disk=83%
|
||||||
[2026-03-16 17:20:01] [BEAT] [alice] load=1.02 mem=3272/3794MB temp=32.6C disk=83%
|
[2026-03-16 17:50:02] [HEAL] [alice] Service blackroad-agent restarted successfully
|
||||||
[2026-03-16 17:20:01] [HEAL] [alice] Service blackroad-agent restarted successfully
|
[2026-03-16 17:50:02] [FLEET] [alice] octavia: UP temp=34C mem=6276MB disk=68%
|
||||||
[2026-03-16 17:20:01] [FLEET] [alice] octavia: UP temp=35C mem=6372MB disk=68%
|
[2026-03-16 17:50:03] [HEAL] [alice] Healed 1 services
|
||||||
[2026-03-16 17:20:02] [HEAL] [alice] Healed 1 services
|
[2026-03-16 17:50:04] [FLEET] [alice] cecilia: DOWN (no ping response)
|
||||||
[2026-03-16 17:20:03] [FLEET] [alice] cecilia: DOWN (no ping response)
|
[2026-03-16 17:50:06] [FLEET] [alice] gematria: UP temp=C mem=4169MB disk=68%
|
||||||
[2026-03-16 17:20:05] [FLEET] [alice] gematria: UP temp=C mem=4151MB disk=68%
|
[2026-03-16 17:50:06] [FLEET] [alice] lucidia: UP temp=58C mem=1182MB disk=33%
|
||||||
[2026-03-16 17:20:06] [FLEET] [alice] lucidia: UP temp=53C mem=1068MB disk=33%
|
[2026-03-16 17:50:08] [FLEET] [alice] aria: DOWN (no ping response)
|
||||||
[2026-03-16 17:20:08] [FLEET] [alice] aria: DOWN (no ping response)
|
[2026-03-16 17:50:10] [FLEET] [alice] anastasia: UP temp=C mem=318MB disk=69%
|
||||||
[2026-03-16 17:20:09] [FLEET] [alice] anastasia: UP temp=C mem=261MB disk=69%
|
[2026-03-16 17:51:01] [BEAT] [alice] load=1.36 mem=3273/3794MB temp=33.6C disk=83%
|
||||||
[2026-03-16 17:21:01] [BEAT] [alice] load=0.86 mem=3277/3794MB temp=31.2C disk=83%
|
[2026-03-16 17:52:01] [BEAT] [alice] load=0.86 mem=3278/3794MB temp=31.2C disk=83%
|
||||||
[2026-03-16 17:22:01] [BEAT] [alice] load=0.86 mem=3276/3794MB temp=31.2C disk=83%
|
[2026-03-16 17:53:01] [BEAT] [alice] load=0.74 mem=3276/3794MB temp=33.6C disk=83%
|
||||||
[2026-03-16 17:23:01] [BEAT] [alice] load=1.03 mem=3264/3794MB temp=32.1C disk=83%
|
[2026-03-16 17:54:01] [BEAT] [alice] load=0.51 mem=3279/3794MB temp=30.7C disk=83%
|
||||||
[2026-03-16 17:23:33] [BEAT] [alice] load=0.70 mem=3274/3794MB temp=31.6C disk=83%
|
[2026-03-16 17:54:25] [BEAT] [alice] load=0.36 mem=3275/3794MB temp=31.2C disk=83%
|
||||||
[2026-03-16 17:23:33] [BEAT] [alice] load=0.70 mem=3274/3794MB temp=31.6C disk=83%
|
[2026-03-16 17:54:25] [BEAT] [alice] load=0.42 mem=3275/3794MB temp=31.2C disk=83%
|
||||||
[2026-03-16 17:24:01] [BEAT] [alice] load=1.72 mem=3275/3794MB temp=32.1C disk=83%
|
[2026-03-16 17:55:01] [HEAL] [alice] Service blackroad-agent is DOWN — restarting
|
||||||
[2026-03-16 17:25:02] [HEAL] [alice] Service blackroad-agent is DOWN — restarting
|
[2026-03-16 17:55:02] [BEAT] [alice] load=0.84 mem=3274/3794MB temp=35.0C disk=83%
|
||||||
[2026-03-16 17:25:02] [BEAT] [alice] load=1.49 mem=3275/3794MB temp=33.6C disk=83%
|
[2026-03-16 17:55:02] [HEAL] [alice] Service blackroad-agent restarted successfully
|
||||||
[2026-03-16 17:25:02] [HEAL] [alice] Service blackroad-agent restarted successfully
|
[2026-03-16 17:55:03] [HEAL] [alice] Healed 1 services
|
||||||
[2026-03-16 17:25:02] [HEAL] [alice] Healed 1 services
|
[2026-03-16 17:56:01] [BEAT] [alice] load=0.80 mem=3278/3794MB temp=31.2C disk=83%
|
||||||
[2026-03-16 17:26:01] [BEAT] [alice] load=1.09 mem=3270/3794MB temp=32.1C disk=83%
|
[2026-03-16 17:57:01] [BEAT] [alice] load=0.95 mem=3275/3794MB temp=34.6C disk=83%
|
||||||
[2026-03-16 17:27:02] [BEAT] [alice] load=0.92 mem=3276/3794MB temp=31.6C disk=83%
|
[2026-03-16 17:58:01] [BEAT] [alice] load=1.46 mem=3277/3794MB temp=31.6C disk=83%
|
||||||
[2026-03-16 17:28:01] [BEAT] [alice] load=0.61 mem=3270/3794MB temp=33.6C disk=83%
|
[2026-03-16 17:59:01] [BEAT] [alice] load=1.43 mem=3280/3794MB temp=34.1C disk=83%
|
||||||
[2026-03-16 17:28:41] [BEAT] [alice] load=0.79 mem=3279/3794MB temp=31.6C disk=83%
|
[2026-03-16 17:59:36] [BEAT] [alice] load=0.85 mem=3274/3794MB temp=32.1C disk=83%
|
||||||
[2026-03-16 17:28:42] [BEAT] [alice] load=0.79 mem=3278/3794MB temp=31.6C disk=83%
|
[2026-03-16 17:59:36] [BEAT] [alice] load=0.85 mem=3273/3794MB temp=33.1C disk=83%
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"node":"alice","ts":"2026-03-16T22:28:41Z","load":0.79,"mem_free_mb":3278,"mem_total_mb":3794,"temp_c":31.6,"disk_pct":83,"throttle":"0x0"}
|
{"node":"alice","ts":"2026-03-16T22:59:36Z","load":0.85,"mem_free_mb":3273,"mem_total_mb":3794,"temp_c":33.1,"disk_pct":83,"throttle":"0x0"}
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
alice
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ LISTEN 0 5 0.0.0.0:8013 0.0.0.0:* users:(("python3",pid
|
|||||||
LISTEN 0 5 0.0.0.0:8012 0.0.0.0:*
|
LISTEN 0 5 0.0.0.0:8012 0.0.0.0:*
|
||||||
LISTEN 0 5 0.0.0.0:8014 0.0.0.0:*
|
LISTEN 0 5 0.0.0.0:8014 0.0.0.0:*
|
||||||
LISTEN 0 2048 0.0.0.0:8001 0.0.0.0:* users:(("python3",pid=617,fd=6))
|
LISTEN 0 2048 0.0.0.0:8001 0.0.0.0:* users:(("python3",pid=617,fd=6))
|
||||||
LISTEN 0 5 0.0.0.0:7890 0.0.0.0:* users:(("python3",pid=19808,fd=5))
|
LISTEN 0 5 0.0.0.0:7890 0.0.0.0:* users:(("python3",pid=6557,fd=5))
|
||||||
LISTEN 0 200 0.0.0.0:443 0.0.0.0:*
|
LISTEN 0 200 0.0.0.0:443 0.0.0.0:*
|
||||||
LISTEN 0 1024 0.0.0.0:6333 0.0.0.0:*
|
LISTEN 0 1024 0.0.0.0:6333 0.0.0.0:*
|
||||||
LISTEN 0 128 0.0.0.0:6334 0.0.0.0:*
|
LISTEN 0 128 0.0.0.0:6334 0.0.0.0:*
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ prism-agent.service
|
|||||||
qdrant.service
|
qdrant.service
|
||||||
redis-server.service
|
redis-server.service
|
||||||
rng-tools-debian.service
|
rng-tools-debian.service
|
||||||
|
road-phone.service
|
||||||
roadnet-failover.service
|
roadnet-failover.service
|
||||||
rsyslog.service
|
rsyslog.service
|
||||||
rtkit-daemon.service
|
rtkit-daemon.service
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
{
|
{
|
||||||
"hostname": "alice",
|
"hostname": "alice",
|
||||||
"ts": "2026-03-16T22:28:44Z",
|
"ts": "2026-03-16T22:59:37Z",
|
||||||
"uptime_seconds": 71061,
|
"uptime_seconds": 72915,
|
||||||
"kernel": "6.1.21-v8+",
|
"kernel": "6.1.21-v8+",
|
||||||
"temp_c": 33.1,
|
"temp_c": 32.1,
|
||||||
"memory_mb": {
|
"memory_mb": {
|
||||||
"total": 3794,
|
"total": 3794,
|
||||||
"used": 424,
|
"used": 419,
|
||||||
"free": 3270
|
"free": 3274
|
||||||
},
|
},
|
||||||
"disk": "12G/15G (83%)",
|
"disk": "12G/15G (83%)",
|
||||||
"load": [
|
"load": [
|
||||||
0.97,
|
0.85,
|
||||||
1.0,
|
0.94,
|
||||||
1.02
|
0.94
|
||||||
],
|
],
|
||||||
"ollama_models": [
|
"ollama_models": [
|
||||||
"qwen2.5:3b",
|
"qwen2.5:3b",
|
||||||
@@ -25,5 +25,5 @@
|
|||||||
],
|
],
|
||||||
"throttle": "0x0",
|
"throttle": "0x0",
|
||||||
"voltage": "0.9160V",
|
"voltage": "0.9160V",
|
||||||
"services_running": 43
|
"services_running": 42
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ LISTEN 0 5 0.0.0.0:8787 0.0.0.0:* users:(("python3",pid
|
|||||||
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=3461172,fd=8),("nginx",pid=3461171,fd=8))
|
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=3461172,fd=8),("nginx",pid=3461171,fd=8))
|
||||||
LISTEN 0 4096 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=589,fd=4),("systemd",pid=1,fd=127))
|
LISTEN 0 4096 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=589,fd=4),("systemd",pid=1,fd=127))
|
||||||
LISTEN 0 4096 *:8080 *:* users:(("headscale",pid=2341808,fd=12))
|
LISTEN 0 4096 *:8080 *:* users:(("headscale",pid=2341808,fd=12))
|
||||||
LISTEN 0 511 *:3000 *:* users:(("node /srv/hello",pid=1933705,fd=19))
|
LISTEN 0 511 *:3000 *:* users:(("node /srv/hello",pid=1939563,fd=19))
|
||||||
LISTEN 0 511 *:3001 *:* users:(("node",pid=757,fd=21))
|
LISTEN 0 511 *:3001 *:* users:(("node",pid=757,fd=21))
|
||||||
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=991,fd=8))
|
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=991,fd=8))
|
||||||
LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=3461172,fd=9),("nginx",pid=3461171,fd=9))
|
LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=3461172,fd=9),("nginx",pid=3461171,fd=9))
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
{
|
{
|
||||||
"hostname": "anastasia",
|
"hostname": "anastasia",
|
||||||
"ts": "2026-03-16T22:28:43Z",
|
"ts": "2026-03-16T22:59:38Z",
|
||||||
"uptime_seconds": 6842015,
|
"uptime_seconds": 6843870,
|
||||||
"kernel": "5.14.0-651.el9.x86_64",
|
"kernel": "5.14.0-651.el9.x86_64",
|
||||||
"temp_c": 0,
|
"temp_c": 0,
|
||||||
"memory_mb": {
|
"memory_mb": {
|
||||||
"total": 765,
|
"total": 765,
|
||||||
"used": 412,
|
"used": 435,
|
||||||
"free": 352
|
"free": 329
|
||||||
},
|
},
|
||||||
"disk": "18G/25G (69%)",
|
"disk": "18G/25G (69%)",
|
||||||
"load": [
|
"load": [
|
||||||
0.1,
|
0.1,
|
||||||
0.07,
|
0.08,
|
||||||
0.05
|
0.06
|
||||||
],
|
],
|
||||||
"ollama_models": [],
|
"ollama_models": [],
|
||||||
"throttle": "N/A",
|
"throttle": "N/A",
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"node":"aria","status":"down","ts":"2026-03-16T22:28:41Z"}
|
{"node":"aria","status":"down","ts":"2026-03-16T22:59:36Z"}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"node":"cecilia","status":"down","ts":"2026-03-16T22:28:41Z"}
|
{"node":"cecilia","status":"down","ts":"2026-03-16T22:59:36Z"}
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
{
|
{
|
||||||
"hostname": "gematria",
|
"hostname": "gematria",
|
||||||
"ts": "2026-03-16T22:28:44Z",
|
"ts": "2026-03-16T22:59:39Z",
|
||||||
"uptime_seconds": 5499316,
|
"uptime_seconds": 5501171,
|
||||||
"kernel": "5.15.0-113-generic",
|
"kernel": "5.15.0-113-generic",
|
||||||
"temp_c": 0,
|
"temp_c": 0,
|
||||||
"memory_mb": {
|
"memory_mb": {
|
||||||
"total": 7937,
|
"total": 7937,
|
||||||
"used": 3302,
|
"used": 3281,
|
||||||
"free": 4154
|
"free": 4176
|
||||||
},
|
},
|
||||||
"disk": "53G/78G (68%)",
|
"disk": "53G/78G (68%)",
|
||||||
"load": [
|
"load": [
|
||||||
3.04,
|
3.09,
|
||||||
3.05,
|
3.06,
|
||||||
3.19
|
3.08
|
||||||
],
|
],
|
||||||
"ollama_models": [
|
"ollama_models": [
|
||||||
"qwen2.5:7b",
|
"qwen2.5:7b",
|
||||||
|
|||||||
@@ -1,50 +1,50 @@
|
|||||||
[2026-03-16 17:08:05] [BEAT] [lucidia] load=3.84 mem=1091/8063MB temp=51.8C disk=33%
|
[2026-03-16 17:38:58] [BEAT] [lucidia] load=1.18 mem=1165/8063MB temp=53.5C disk=33%
|
||||||
[2026-03-16 17:08:05] [BEAT] [lucidia] load=3.84 mem=1089/8063MB temp=50.7C disk=33%
|
[2026-03-16 17:39:01] [BEAT] [lucidia] load=1.17 mem=1109/8063MB temp=52.4C disk=33%
|
||||||
[2026-03-16 17:09:01] [BEAT] [lucidia] load=3.55 mem=1059/8063MB temp=58.4C disk=33%
|
[2026-03-16 17:40:01] [FLEET] [lucidia] Starting cross-node health check
|
||||||
[2026-03-16 17:10:01] [FLEET] [lucidia] Starting cross-node health check
|
[2026-03-16 17:40:01] [BEAT] [lucidia] load=2.16 mem=1114/8063MB temp=54.5C disk=33%
|
||||||
[2026-03-16 17:10:01] [BEAT] [lucidia] load=1.74 mem=1016/8063MB temp=51.2C disk=33%
|
[2026-03-16 17:40:01] [HEAL] [lucidia] High swap: 2157MB — clearing inactive
|
||||||
[2026-03-16 17:10:01] [HEAL] [lucidia] High swap: 2157MB — clearing inactive
|
[2026-03-16 17:40:03] [FLEET] [lucidia] alice: UP temp=34C mem=3269MB disk=83%
|
||||||
[2026-03-16 17:10:02] [FLEET] [lucidia] alice: UP temp=34C mem=3256MB disk=83%
|
[2026-03-16 17:40:05] [FLEET] [lucidia] octavia: DOWN (no ping response)
|
||||||
[2026-03-16 17:10:04] [FLEET] [lucidia] octavia: DOWN (no ping response)
|
[2026-03-16 17:40:07] [FLEET] [lucidia] cecilia: DOWN (no ping response)
|
||||||
[2026-03-16 17:10:06] [FLEET] [lucidia] cecilia: DOWN (no ping response)
|
[2026-03-16 17:40:08] [FLEET] [lucidia] gematria: UP temp=C mem=4177MB disk=68%
|
||||||
[2026-03-16 17:10:07] [FLEET] [lucidia] gematria: UP temp=C mem=4148MB disk=68%
|
[2026-03-16 17:40:10] [FLEET] [lucidia] aria: DOWN (no ping response)
|
||||||
[2026-03-16 17:10:09] [FLEET] [lucidia] aria: DOWN (no ping response)
|
[2026-03-16 17:40:11] [FLEET] [lucidia] anastasia: UP temp=C mem=318MB disk=69%
|
||||||
[2026-03-16 17:10:10] [FLEET] [lucidia] anastasia: UP temp=C mem=329MB disk=69%
|
[2026-03-16 17:41:01] [BEAT] [lucidia] load=2.35 mem=1119/8063MB temp=60.0C disk=33%
|
||||||
[2026-03-16 17:11:12] [BEAT] [lucidia] load=19.78 mem=1112/8063MB temp=50.7C disk=33%
|
[2026-03-16 17:42:01] [BEAT] [lucidia] load=1.28 mem=1107/8063MB temp=52.4C disk=33%
|
||||||
[2026-03-16 17:12:01] [BEAT] [lucidia] load=10.78 mem=1113/8063MB temp=52.9C disk=33%
|
[2026-03-16 17:43:01] [BEAT] [lucidia] load=1.23 mem=1129/8063MB temp=52.4C disk=33%
|
||||||
[2026-03-16 17:13:01] [BEAT] [lucidia] load=4.78 mem=1072/8063MB temp=57.3C disk=33%
|
[2026-03-16 17:44:01] [BEAT] [lucidia] load=2.19 mem=1121/8063MB temp=52.4C disk=33%
|
||||||
[2026-03-16 17:13:15] [BEAT] [lucidia] load=4.75 mem=1094/8063MB temp=59.0C disk=33%
|
[2026-03-16 17:44:07] [BEAT] [lucidia] load=2.18 mem=1128/8063MB temp=52.9C disk=33%
|
||||||
[2026-03-16 17:13:15] [BEAT] [lucidia] load=4.75 mem=1093/8063MB temp=58.4C disk=33%
|
[2026-03-16 17:44:07] [BEAT] [lucidia] load=2.18 mem=1125/8063MB temp=52.9C disk=33%
|
||||||
[2026-03-16 17:14:01] [BEAT] [lucidia] load=2.93 mem=1046/8063MB temp=50.7C disk=33%
|
[2026-03-16 17:45:01] [BEAT] [lucidia] load=2.92 mem=1099/8063MB temp=59.0C disk=33%
|
||||||
[2026-03-16 17:15:01] [BEAT] [lucidia] load=14.84 mem=1058/8063MB temp=52.4C disk=33%
|
[2026-03-16 17:45:01] [HEAL] [lucidia] High swap: 2157MB — clearing inactive
|
||||||
[2026-03-16 17:15:01] [HEAL] [lucidia] High swap: 2157MB — clearing inactive
|
[2026-03-16 17:45:47] [DIAL] [lucidia] Switchboard unreachable
|
||||||
[2026-03-16 17:15:48] [DIAL] [lucidia] Switchboard unreachable
|
[2026-03-16 17:46:33] [BEAT] [lucidia] load=17.05 mem=1136/8063MB temp=50.7C disk=33%
|
||||||
[2026-03-16 17:16:17] [BEAT] [lucidia] load=38.03 mem=1096/8063MB temp=50.1C disk=33%
|
[2026-03-16 17:47:01] [BEAT] [lucidia] load=12.22 mem=1124/8063MB temp=52.4C disk=33%
|
||||||
[2026-03-16 17:17:02] [BEAT] [lucidia] load=19.97 mem=1095/8063MB temp=51.8C disk=33%
|
[2026-03-16 17:48:02] [BEAT] [lucidia] load=5.56 mem=1130/8063MB temp=57.9C disk=33%
|
||||||
[2026-03-16 17:18:01] [BEAT] [lucidia] load=9.42 mem=1107/8063MB temp=59.0C disk=33%
|
[2026-03-16 17:49:01] [BEAT] [lucidia] load=4.64 mem=1124/8063MB temp=56.2C disk=33%
|
||||||
[2026-03-16 17:18:24] [BEAT] [lucidia] load=7.63 mem=1110/8063MB temp=54.0C disk=33%
|
[2026-03-16 17:49:16] [BEAT] [lucidia] load=3.77 mem=1205/8063MB temp=56.8C disk=33%
|
||||||
[2026-03-16 17:18:24] [BEAT] [lucidia] load=7.63 mem=1108/8063MB temp=54.5C disk=33%
|
[2026-03-16 17:49:16] [BEAT] [lucidia] load=3.77 mem=1203/8063MB temp=56.2C disk=33%
|
||||||
[2026-03-16 17:19:01] [BEAT] [lucidia] load=4.60 mem=1069/8063MB temp=51.8C disk=33%
|
[2026-03-16 17:50:01] [FLEET] [lucidia] Starting cross-node health check
|
||||||
[2026-03-16 17:20:01] [FLEET] [lucidia] Starting cross-node health check
|
[2026-03-16 17:50:01] [BEAT] [lucidia] load=3.24 mem=1205/8063MB temp=58.4C disk=33%
|
||||||
[2026-03-16 17:20:01] [BEAT] [lucidia] load=3.28 mem=1065/8063MB temp=53.5C disk=33%
|
[2026-03-16 17:50:01] [HEAL] [lucidia] High swap: 2157MB — clearing inactive
|
||||||
[2026-03-16 17:20:01] [HEAL] [lucidia] High swap: 2157MB — clearing inactive
|
[2026-03-16 17:50:02] [FLEET] [lucidia] alice: UP temp=34C mem=3267MB disk=83%
|
||||||
[2026-03-16 17:20:02] [FLEET] [lucidia] alice: UP temp=33C mem=3266MB disk=83%
|
[2026-03-16 17:50:04] [FLEET] [lucidia] octavia: DOWN (no ping response)
|
||||||
[2026-03-16 17:20:04] [FLEET] [lucidia] octavia: DOWN (no ping response)
|
[2026-03-16 17:50:06] [FLEET] [lucidia] cecilia: DOWN (no ping response)
|
||||||
[2026-03-16 17:20:06] [FLEET] [lucidia] cecilia: DOWN (no ping response)
|
[2026-03-16 17:50:08] [FLEET] [lucidia] gematria: UP temp=C mem=4158MB disk=68%
|
||||||
[2026-03-16 17:20:41] [FLEET] [lucidia] gematria: UP temp=C mem=4149MB disk=68%
|
[2026-03-16 17:50:10] [FLEET] [lucidia] aria: DOWN (no ping response)
|
||||||
[2026-03-16 17:20:43] [FLEET] [lucidia] aria: DOWN (no ping response)
|
[2026-03-16 17:50:10] [FLEET] [lucidia] anastasia: UP temp=C mem=318MB disk=69%
|
||||||
[2026-03-16 17:20:43] [FLEET] [lucidia] anastasia: UP temp=C mem=350MB disk=69%
|
[2026-03-16 17:51:02] [BEAT] [lucidia] load=2.03 mem=1215/8063MB temp=49.0C disk=33%
|
||||||
[2026-03-16 17:21:02] [BEAT] [lucidia] load=18.06 mem=1068/8063MB temp=60.6C disk=33%
|
[2026-03-16 17:52:01] [BEAT] [lucidia] load=2.03 mem=1187/8063MB temp=50.7C disk=33%
|
||||||
[2026-03-16 17:22:01] [BEAT] [lucidia] load=8.15 mem=1122/8063MB temp=54.5C disk=33%
|
[2026-03-16 17:52:30] [DIAL] [lucidia] Switchboard unreachable
|
||||||
[2026-03-16 17:22:29] [DIAL] [lucidia] Switchboard unreachable
|
[2026-03-16 17:53:01] [BEAT] [lucidia] load=2.07 mem=1188/8063MB temp=56.8C disk=33%
|
||||||
[2026-03-16 17:23:01] [BEAT] [lucidia] load=4.28 mem=1120/8063MB temp=55.6C disk=33%
|
[2026-03-16 17:54:01] [BEAT] [lucidia] load=2.82 mem=1210/8063MB temp=51.2C disk=33%
|
||||||
[2026-03-16 17:23:32] [BEAT] [lucidia] load=3.31 mem=1065/8063MB temp=52.4C disk=33%
|
[2026-03-16 17:54:24] [BEAT] [lucidia] load=2.18 mem=1193/8063MB temp=50.7C disk=33%
|
||||||
[2026-03-16 17:23:32] [BEAT] [lucidia] load=3.31 mem=1062/8063MB temp=54.0C disk=33%
|
[2026-03-16 17:54:24] [BEAT] [lucidia] load=2.18 mem=1191/8063MB temp=50.7C disk=33%
|
||||||
[2026-03-16 17:24:01] [BEAT] [lucidia] load=2.95 mem=1100/8063MB temp=58.4C disk=33%
|
[2026-03-16 17:55:01] [BEAT] [lucidia] load=2.58 mem=1184/8063MB temp=55.6C disk=33%
|
||||||
[2026-03-16 17:25:01] [BEAT] [lucidia] load=3.05 mem=1114/8063MB temp=52.4C disk=33%
|
[2026-03-16 17:55:01] [HEAL] [lucidia] High swap: 2157MB — clearing inactive
|
||||||
[2026-03-16 17:25:01] [HEAL] [lucidia] High swap: 2157MB — clearing inactive
|
[2026-03-16 17:56:33] [BEAT] [lucidia] load=25.83 mem=1176/8063MB temp=46.9C disk=33%
|
||||||
[2026-03-16 17:26:01] [BEAT] [lucidia] load=3.92 mem=1118/8063MB temp=62.8C disk=33%
|
[2026-03-16 17:57:01] [BEAT] [lucidia] load=19.43 mem=1159/8063MB temp=57.3C disk=33%
|
||||||
[2026-03-16 17:27:01] [BEAT] [lucidia] load=2.34 mem=1039/8063MB temp=52.4C disk=33%
|
[2026-03-16 17:58:01] [BEAT] [lucidia] load=7.37 mem=1208/8063MB temp=46.9C disk=33%
|
||||||
[2026-03-16 17:28:01] [BEAT] [lucidia] load=2.08 mem=1072/8063MB temp=54.5C disk=33%
|
[2026-03-16 17:59:01] [BEAT] [lucidia] load=3.98 mem=1195/8063MB temp=48.0C disk=33%
|
||||||
[2026-03-16 17:28:41] [BEAT] [lucidia] load=1.82 mem=1093/8063MB temp=56.2C disk=33%
|
[2026-03-16 17:59:36] [BEAT] [lucidia] load=3.10 mem=1145/8063MB temp=54.0C disk=33%
|
||||||
[2026-03-16 17:28:42] [BEAT] [lucidia] load=1.82 mem=1089/8063MB temp=57.3C disk=33%
|
[2026-03-16 17:59:36] [BEAT] [lucidia] load=3.10 mem=1142/8063MB temp=54.0C disk=33%
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"node":"lucidia","ts":"2026-03-16T22:28:41Z","load":1.82,"mem_free_mb":1089,"mem_total_mb":8063,"temp_c":57.3,"disk_pct":33,"throttle":"0x0"}
|
{"node":"lucidia","ts":"2026-03-16T22:59:36Z","load":3.10,"mem_free_mb":1142,"mem_total_mb":8063,"temp_c":54.0,"disk_pct":33,"throttle":"0x0"}
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
{
|
{
|
||||||
"hostname": "octavia",
|
"hostname": "octavia",
|
||||||
"ts": "2026-03-16T22:28:44Z",
|
"ts": "2026-03-16T22:59:37Z",
|
||||||
"uptime_seconds": 70882,
|
"uptime_seconds": 72735,
|
||||||
"kernel": "6.12.62+rpt-rpi-2712",
|
"kernel": "6.12.62+rpt-rpi-2712",
|
||||||
"temp_c": 57.9,
|
"temp_c": 54.5,
|
||||||
"memory_mb": {
|
"memory_mb": {
|
||||||
"total": 8063,
|
"total": 8063,
|
||||||
"used": 7025,
|
"used": 6914,
|
||||||
"free": 1037
|
"free": 1148
|
||||||
},
|
},
|
||||||
"disk": "74G/235G (33%)",
|
"disk": "74G/235G (33%)",
|
||||||
"load": [
|
"load": [
|
||||||
2.16,
|
3.1,
|
||||||
4.65,
|
6.25,
|
||||||
6.97
|
5.37
|
||||||
],
|
],
|
||||||
"ollama_models": [
|
"ollama_models": [
|
||||||
"qwen2.5:3b",
|
"qwen2.5:3b",
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"node":"octavia","status":"down","ts":"2026-03-16T22:28:41Z"}
|
{"node":"octavia","status":"down","ts":"2026-03-16T22:59:36Z"}
|
||||||
|
|||||||
0
operator/memory/memory-agent-dispatch.sh
Normal file → Executable file
0
operator/memory/memory-agent-dispatch.sh
Normal file → Executable file
8
operator/memory/memory-planner.sh
Normal file → Executable file
8
operator/memory/memory-planner.sh
Normal file → Executable file
@@ -57,7 +57,7 @@ cmd_plan() {
|
|||||||
|
|
||||||
local title cadence status progress
|
local title cadence status progress
|
||||||
title=$(jq -r '.title' "$project_file")
|
title=$(jq -r '.title' "$project_file")
|
||||||
cadence=$(jq -r '.cadence' "$project_file")
|
cadence=$(jq -r '.timescale' "$project_file")
|
||||||
status=$(jq -r '.status' "$project_file")
|
status=$(jq -r '.status' "$project_file")
|
||||||
progress=$(jq -r '.progress' "$project_file")
|
progress=$(jq -r '.progress' "$project_file")
|
||||||
|
|
||||||
@@ -121,7 +121,7 @@ cmd_next() {
|
|||||||
pending_count=$(jq '[.todos[] | select(.status == "pending")] | length' "$f")
|
pending_count=$(jq '[.todos[] | select(.status == "pending")] | length' "$f")
|
||||||
[[ "$pending_count" -eq 0 ]] && continue
|
[[ "$pending_count" -eq 0 ]] && continue
|
||||||
|
|
||||||
cadence=$(jq -r '.cadence' "$f")
|
cadence=$(jq -r '.timescale' "$f")
|
||||||
pid=$(jq -r '.project_id' "$f")
|
pid=$(jq -r '.project_id' "$f")
|
||||||
title=$(jq -r '.title' "$f")
|
title=$(jq -r '.title' "$f")
|
||||||
|
|
||||||
@@ -251,7 +251,7 @@ cmd_roadmap() {
|
|||||||
for f in "$PROJECTS_DIR"/*.json; do
|
for f in "$PROJECTS_DIR"/*.json; do
|
||||||
[[ ! -f "$f" ]] && continue
|
[[ ! -f "$f" ]] && continue
|
||||||
local fc
|
local fc
|
||||||
fc=$(jq -r '.cadence' "$f")
|
fc=$(jq -r '.timescale' "$f")
|
||||||
[[ "$fc" != "$cadence" ]] && continue
|
[[ "$fc" != "$cadence" ]] && continue
|
||||||
|
|
||||||
if [[ "$found" -eq 0 ]]; then
|
if [[ "$found" -eq 0 ]]; then
|
||||||
@@ -340,7 +340,7 @@ cmd_suggest() {
|
|||||||
pid=$(jq -r '.project_id' "$f")
|
pid=$(jq -r '.project_id' "$f")
|
||||||
progress=$(jq -r '.progress' "$f")
|
progress=$(jq -r '.progress' "$f")
|
||||||
pending=$(jq '[.todos[] | select(.status == "pending")] | length' "$f")
|
pending=$(jq '[.todos[] | select(.status == "pending")] | length' "$f")
|
||||||
cadence=$(jq -r '.cadence' "$f")
|
cadence=$(jq -r '.timescale' "$f")
|
||||||
title=$(jq -r '.title' "$f")
|
title=$(jq -r '.title' "$f")
|
||||||
|
|
||||||
[[ "$pending" -eq 0 ]] && continue
|
[[ "$pending" -eq 0 ]] && continue
|
||||||
|
|||||||
0
operator/memory/memory-slack.sh
Normal file → Executable file
0
operator/memory/memory-slack.sh
Normal file → Executable file
0
operator/memory/memory-watchdog.sh
Normal file → Executable file
0
operator/memory/memory-watchdog.sh
Normal file → Executable file
203
scripts/blackroad-llm-train-v4.py
Normal file
203
scripts/blackroad-llm-train-v4.py
Normal file
@@ -0,0 +1,203 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
BlackRoad LLM v4 — Train 8M param transformer on corpus v4 (5.8MB)
|
||||||
|
Uses word-level tokenizer (fast) + MPS acceleration on Mac
|
||||||
|
"""
|
||||||
|
import torch
|
||||||
|
import torch.nn as nn
|
||||||
|
import torch.optim as optim
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
import math
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
|
CORPUS_PATH = os.path.expanduser("~/.blackroad/training-corpus-v4.txt")
|
||||||
|
MODEL_PATH = os.path.expanduser("~/.blackroad/blackroad-llm-8m.pt")
|
||||||
|
DEVICE = "mps" if torch.backends.mps.is_available() else "cpu"
|
||||||
|
|
||||||
|
# Model config — ~8M params
|
||||||
|
VOCAB_SIZE = 16000
|
||||||
|
DIM = 256
|
||||||
|
NUM_LAYERS = 6
|
||||||
|
NUM_HEADS = 8
|
||||||
|
SEQ_LEN = 128
|
||||||
|
BATCH_SIZE = 16
|
||||||
|
EPOCHS = 3
|
||||||
|
LR = 3e-4
|
||||||
|
|
||||||
|
print(f"BlackRoad LLM v4 Training")
|
||||||
|
print(f"Device: {DEVICE} | Params: ~8M | Corpus: v4")
|
||||||
|
print(f"Config: dim={DIM}, layers={NUM_LAYERS}, heads={NUM_HEADS}, vocab={VOCAB_SIZE}")
|
||||||
|
print("=" * 60)
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# WORD-LEVEL TOKENIZER (fast — no BPE bottleneck)
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
print("Loading corpus...")
|
||||||
|
with open(CORPUS_PATH, 'r', encoding='utf-8') as f:
|
||||||
|
text = f.read()
|
||||||
|
print(f" Corpus: {len(text):,} chars, {len(text.split()):,} words")
|
||||||
|
|
||||||
|
# Build vocabulary from word frequencies
|
||||||
|
words = text.lower().split()
|
||||||
|
word_counts = Counter(words)
|
||||||
|
vocab_words = [w for w, _ in word_counts.most_common(VOCAB_SIZE - 3)]
|
||||||
|
|
||||||
|
word2id = {"<PAD>": 0, "<UNK>": 1, "<EOS>": 2}
|
||||||
|
for i, w in enumerate(vocab_words, start=3):
|
||||||
|
word2id[w] = i
|
||||||
|
id2word = {v: k for k, v in word2id.items()}
|
||||||
|
actual_vocab = len(word2id)
|
||||||
|
print(f" Vocabulary: {actual_vocab:,} tokens")
|
||||||
|
|
||||||
|
# Encode entire corpus
|
||||||
|
print("Encoding corpus...")
|
||||||
|
token_ids = [word2id.get(w, 1) for w in words]
|
||||||
|
print(f" Encoded: {len(token_ids):,} tokens")
|
||||||
|
|
||||||
|
# Create sequences
|
||||||
|
num_sequences = (len(token_ids) - 1) // SEQ_LEN
|
||||||
|
data = torch.tensor(token_ids[:num_sequences * SEQ_LEN + 1], dtype=torch.long)
|
||||||
|
print(f" Sequences: {num_sequences:,} (len={SEQ_LEN})")
|
||||||
|
print()
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# TRANSFORMER MODEL
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
class BlackRoadLLM(nn.Module):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.embedding = nn.Embedding(actual_vocab, DIM)
|
||||||
|
self.pos_embedding = nn.Embedding(SEQ_LEN, DIM)
|
||||||
|
|
||||||
|
encoder_layer = nn.TransformerEncoderLayer(
|
||||||
|
d_model=DIM,
|
||||||
|
nhead=NUM_HEADS,
|
||||||
|
dim_feedforward=DIM * 4,
|
||||||
|
dropout=0.1,
|
||||||
|
batch_first=True,
|
||||||
|
norm_first=True,
|
||||||
|
)
|
||||||
|
self.transformer = nn.TransformerEncoder(encoder_layer, num_layers=NUM_LAYERS)
|
||||||
|
self.ln_f = nn.LayerNorm(DIM)
|
||||||
|
self.head = nn.Linear(DIM, actual_vocab, bias=False)
|
||||||
|
|
||||||
|
# Causal mask
|
||||||
|
self.register_buffer(
|
||||||
|
"causal_mask",
|
||||||
|
torch.triu(torch.ones(SEQ_LEN, SEQ_LEN), diagonal=1).bool()
|
||||||
|
)
|
||||||
|
|
||||||
|
def forward(self, x):
|
||||||
|
B, T = x.shape
|
||||||
|
pos = torch.arange(T, device=x.device).unsqueeze(0)
|
||||||
|
x = self.embedding(x) + self.pos_embedding(pos)
|
||||||
|
x = self.transformer(x, mask=self.causal_mask[:T, :T])
|
||||||
|
x = self.ln_f(x)
|
||||||
|
return self.head(x)
|
||||||
|
|
||||||
|
model = BlackRoadLLM().to(DEVICE)
|
||||||
|
num_params = sum(p.numel() for p in model.parameters())
|
||||||
|
print(f"Model: {num_params:,} parameters ({num_params/1e6:.1f}M)")
|
||||||
|
|
||||||
|
optimizer = optim.AdamW(model.parameters(), lr=LR, weight_decay=0.01)
|
||||||
|
scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=EPOCHS * (num_sequences // BATCH_SIZE))
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# TRAINING LOOP
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
print(f"\nTraining {EPOCHS} epochs...")
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
|
for epoch in range(EPOCHS):
|
||||||
|
model.train()
|
||||||
|
epoch_loss = 0
|
||||||
|
num_batches = 0
|
||||||
|
|
||||||
|
# Shuffle sequence order
|
||||||
|
perm = torch.randperm(num_sequences)
|
||||||
|
|
||||||
|
for i in range(0, num_sequences - BATCH_SIZE, BATCH_SIZE):
|
||||||
|
batch_idx = perm[i:i + BATCH_SIZE]
|
||||||
|
|
||||||
|
# Build batch
|
||||||
|
inputs = torch.stack([data[idx * SEQ_LEN:(idx * SEQ_LEN) + SEQ_LEN] for idx in batch_idx]).to(DEVICE)
|
||||||
|
targets = torch.stack([data[(idx * SEQ_LEN) + 1:(idx * SEQ_LEN) + SEQ_LEN + 1] for idx in batch_idx]).to(DEVICE)
|
||||||
|
|
||||||
|
logits = model(inputs)
|
||||||
|
loss = nn.functional.cross_entropy(logits.reshape(-1, actual_vocab), targets.reshape(-1), ignore_index=0)
|
||||||
|
|
||||||
|
optimizer.zero_grad()
|
||||||
|
loss.backward()
|
||||||
|
torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)
|
||||||
|
optimizer.step()
|
||||||
|
scheduler.step()
|
||||||
|
|
||||||
|
epoch_loss += loss.item()
|
||||||
|
num_batches += 1
|
||||||
|
|
||||||
|
if num_batches % 100 == 0:
|
||||||
|
avg_loss = epoch_loss / num_batches
|
||||||
|
ppl = math.exp(min(avg_loss, 20))
|
||||||
|
elapsed = time.time() - start_time
|
||||||
|
print(f" Epoch {epoch+1}/{EPOCHS} | Batch {num_batches} | Loss: {avg_loss:.4f} | PPL: {ppl:.1f} | Time: {elapsed:.0f}s")
|
||||||
|
|
||||||
|
avg_loss = epoch_loss / max(num_batches, 1)
|
||||||
|
ppl = math.exp(min(avg_loss, 20))
|
||||||
|
elapsed = time.time() - start_time
|
||||||
|
print(f" Epoch {epoch+1} DONE — Loss: {avg_loss:.4f} | PPL: {ppl:.1f} | Time: {elapsed:.0f}s")
|
||||||
|
print()
|
||||||
|
|
||||||
|
total_time = time.time() - start_time
|
||||||
|
print(f"Training complete in {total_time:.0f}s ({total_time/60:.1f} min)")
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# SAVE
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
torch.save({
|
||||||
|
'model_state_dict': model.state_dict(),
|
||||||
|
'word2id': word2id,
|
||||||
|
'id2word': id2word,
|
||||||
|
'config': {
|
||||||
|
'vocab_size': actual_vocab,
|
||||||
|
'dim': DIM,
|
||||||
|
'num_layers': NUM_LAYERS,
|
||||||
|
'num_heads': NUM_HEADS,
|
||||||
|
'seq_len': SEQ_LEN,
|
||||||
|
'params': num_params,
|
||||||
|
'corpus': 'v4',
|
||||||
|
'corpus_size': len(text),
|
||||||
|
'trained': time.strftime('%Y-%m-%dT%H:%M:%S'),
|
||||||
|
}
|
||||||
|
}, MODEL_PATH)
|
||||||
|
|
||||||
|
print(f"Saved to {MODEL_PATH}")
|
||||||
|
size_mb = os.path.getsize(MODEL_PATH) / (1024 * 1024)
|
||||||
|
print(f"Model size: {size_mb:.1f}MB")
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# QUICK TEST — generate a few tokens
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
print("\nTest generation:")
|
||||||
|
model.eval()
|
||||||
|
prompts = ["blackroad", "the mesh network", "agents collaborate"]
|
||||||
|
for prompt in prompts:
|
||||||
|
tokens = [word2id.get(w, 1) for w in prompt.lower().split()]
|
||||||
|
x = torch.tensor([tokens + [0] * (SEQ_LEN - len(tokens))], dtype=torch.long).to(DEVICE)
|
||||||
|
|
||||||
|
with torch.no_grad():
|
||||||
|
for _ in range(20):
|
||||||
|
logits = model(x)
|
||||||
|
next_token = logits[0, len(tokens) - 1].argmax().item()
|
||||||
|
tokens.append(next_token)
|
||||||
|
x = torch.tensor([tokens + [0] * (SEQ_LEN - len(tokens))], dtype=torch.long).to(DEVICE)
|
||||||
|
|
||||||
|
output = ' '.join(id2word.get(t, '<UNK>') for t in tokens if t > 2)
|
||||||
|
print(f" '{prompt}' → {output[:100]}")
|
||||||
|
|
||||||
|
print("\nBlackRoad LLM v4 ready.")
|
||||||
Reference in New Issue
Block a user