sol: profile health triage for 27 Hermes profiles (26 ACTIVE, 1 PLACEHOLDER)
This commit is contained in:
1 parent
257470a083
commit
340c30d8e8
3 files changed
+403
No files matched your search
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env python3
|
||||
"""CHECK for sol-profile-health artifact.
|
||||
|
||||
Re-derives the profile classification straight from the filesystem and
|
||||
compares it against the recorded values in the artifact. Exit 0 = artifact
|
||||
matches reality; nonzero = artifact is wrong or missing.
|
||||
|
||||
Usage: python3 check_sol_profile_health.py (exit code is the verdict)
|
||||
"""
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
PROFILES = "/root/.hermes/profiles"
|
||||
ARTIFACT = "/root/.hermes/wizard-outputs/sol/sol-profile-health-2026-10-24.json"
|
||||
|
||||
|
||||
def recompute():
|
||||
out = {}
|
||||
for name in os.listdir(PROFILES):
|
||||
p = os.path.join(PROFILES, name)
|
||||
if not os.path.isdir(p):
|
||||
continue
|
||||
cfg = os.path.join(p, "config.yaml")
|
||||
has_cfg = os.path.isfile(cfg)
|
||||
model = ""
|
||||
if has_cfg:
|
||||
try:
|
||||
t = open(cfg, encoding="utf-8", errors="replace").read()
|
||||
m = re.search(r"model:\s*\n\s*default:\s*(.+)", t)
|
||||
if not m:
|
||||
m = re.search(r"default:\s*(.+)", t)
|
||||
model = m.group(1).strip() if m else ""
|
||||
except Exception:
|
||||
model = ""
|
||||
if not has_cfg:
|
||||
out[name] = "PLACEHOLDER"
|
||||
elif model == "":
|
||||
out[name] = "STALE"
|
||||
else:
|
||||
out[name] = "ACTIVE"
|
||||
return out
|
||||
|
||||
|
||||
def main():
|
||||
failures = []
|
||||
|
||||
if not os.path.exists(ARTIFACT):
|
||||
print("FAIL: artifact missing: " + ARTIFACT)
|
||||
sys.exit(1)
|
||||
|
||||
with open(ARTIFACT, encoding="utf-8") as fh:
|
||||
art = json.load(fh)
|
||||
|
||||
recorded = {}
|
||||
for e in art.get("entries", []):
|
||||
recorded[e["name"]] = e.get("status")
|
||||
|
||||
expected = recompute()
|
||||
|
||||
# Every name must be present on both sides with identical status.
|
||||
for name, st in expected.items():
|
||||
if recorded.get(name) != st:
|
||||
failures.append("name %r recorded=%r expected=%r" % (name, recorded.get(name), st))
|
||||
for name in recorded:
|
||||
if name not in expected:
|
||||
failures.append("extra name in artifact: %r" % name)
|
||||
|
||||
# Summary cross-check.
|
||||
counts = {}
|
||||
for s in expected.values():
|
||||
counts[s] = counts.get(s, 0) + 1
|
||||
if art.get("total") != len(expected):
|
||||
failures.append("total mismatch: %r != %d" % (art.get("total"), len(expected)))
|
||||
if art.get("ACTIVE") != counts.get("ACTIVE", 0):
|
||||
failures.append("ACTIVE count mismatch: %r != %d" % (art.get("ACTIVE"), counts.get("ACTIVE", 0)))
|
||||
if art.get("STALE") != counts.get("STALE", 0):
|
||||
failures.append("STALE count mismatch: %r != %d" % (art.get("STALE"), counts.get("STALE", 0)))
|
||||
if art.get("PLACEHOLDER") != counts.get("PLACEHOLDER", 0):
|
||||
failures.append("PLACEHOLDER count mismatch: %r != %d" % (art.get("PLACEHOLDER"), counts.get("PLACEHOLDER", 0)))
|
||||
|
||||
if failures:
|
||||
print("FAIL: artifact does not match filesystem reality")
|
||||
for f in failures:
|
||||
print(" - " + f)
|
||||
sys.exit(1)
|
||||
|
||||
print("PASS: sol-profile-health artifact verified against filesystem")
|
||||
print(" total=%d ACTIVE=%d STALE=%d PLACEHOLDER=%d" % (
|
||||
len(expected), counts.get("ACTIVE", 0), counts.get("STALE", 0), counts.get("PLACEHOLDER", 0)))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,253 @@
|
||||
{
|
||||
"generated_at_utc": "2026-10-24T05:09:48Z",
|
||||
"profiles_base": "/root/.hermes/profiles",
|
||||
"total": 27,
|
||||
"ACTIVE": 26,
|
||||
"STALE": 0,
|
||||
"PLACEHOLDER": 1,
|
||||
"entries": [
|
||||
{
|
||||
"name": "argus",
|
||||
"has_cfg": true,
|
||||
"model": "meituan/longcat-2.5-preview:free",
|
||||
"model_err": "",
|
||||
"nfiles": 16,
|
||||
"ndirs": 24,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "beam",
|
||||
"has_cfg": true,
|
||||
"model": "reflection/beam-1.0-501b-a23b:free",
|
||||
"model_err": "",
|
||||
"nfiles": 16,
|
||||
"ndirs": 23,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "buzzpilot",
|
||||
"has_cfg": true,
|
||||
"model": "gpt-5.6-sol",
|
||||
"model_err": "",
|
||||
"nfiles": 23,
|
||||
"ndirs": 26,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "courtney",
|
||||
"has_cfg": true,
|
||||
"model": "deepseek-v4-pro",
|
||||
"model_err": "",
|
||||
"nfiles": 12,
|
||||
"ndirs": 21,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "forge",
|
||||
"has_cfg": true,
|
||||
"model": "poolside/laguna-s-2.1:free",
|
||||
"model_err": "",
|
||||
"nfiles": 29,
|
||||
"ndirs": 24,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "home",
|
||||
"has_cfg": true,
|
||||
"model": "deepseek-v4-pro",
|
||||
"model_err": "",
|
||||
"nfiles": 10,
|
||||
"ndirs": 19,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "hou3",
|
||||
"has_cfg": true,
|
||||
"model": "stepfun/step-3.7-flash:free",
|
||||
"model_err": "",
|
||||
"nfiles": 16,
|
||||
"ndirs": 22,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "inference-lab",
|
||||
"has_cfg": true,
|
||||
"model": "gpt-5.6-sol",
|
||||
"model_err": "",
|
||||
"nfiles": 17,
|
||||
"ndirs": 21,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "kendra",
|
||||
"has_cfg": true,
|
||||
"model": "deepseek-v4-pro",
|
||||
"model_err": "",
|
||||
"nfiles": 10,
|
||||
"ndirs": 19,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "ledger",
|
||||
"has_cfg": true,
|
||||
"model": "upstage/solar-mini4:free",
|
||||
"model_err": "",
|
||||
"nfiles": 19,
|
||||
"ndirs": 24,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "lilly",
|
||||
"has_cfg": true,
|
||||
"model": "deepseek-v4-pro",
|
||||
"model_err": "",
|
||||
"nfiles": 12,
|
||||
"ndirs": 22,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "merlin",
|
||||
"has_cfg": true,
|
||||
"model": "stepfun/step-5-preview:free",
|
||||
"model_err": "",
|
||||
"nfiles": 17,
|
||||
"ndirs": 24,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "nightprowl",
|
||||
"has_cfg": true,
|
||||
"model": "meituan/longcat-2.0:free",
|
||||
"model_err": "",
|
||||
"nfiles": 19,
|
||||
"ndirs": 22,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "null",
|
||||
"has_cfg": true,
|
||||
"model": "meituan/longcat-2.5-preview:free",
|
||||
"model_err": "",
|
||||
"nfiles": 19,
|
||||
"ndirs": 24,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "praetorian",
|
||||
"has_cfg": true,
|
||||
"model": "nemotron-3.5-lightning-free",
|
||||
"model_err": "",
|
||||
"nfiles": 31,
|
||||
"ndirs": 27,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "quill",
|
||||
"has_cfg": true,
|
||||
"model": "stepfun/step-3.7-flash:free",
|
||||
"model_err": "",
|
||||
"nfiles": 18,
|
||||
"ndirs": 23,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "scribe",
|
||||
"has_cfg": true,
|
||||
"model": "meituan/longcat-2.0:free",
|
||||
"model_err": "",
|
||||
"nfiles": 18,
|
||||
"ndirs": 23,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "sentinel",
|
||||
"has_cfg": true,
|
||||
"model": "nvidia/nemotron-3.5-super-vl-120b-a12b",
|
||||
"model_err": "",
|
||||
"nfiles": 16,
|
||||
"ndirs": 23,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "sherry",
|
||||
"has_cfg": true,
|
||||
"model": "deepseek-v4-pro",
|
||||
"model_err": "",
|
||||
"nfiles": 10,
|
||||
"ndirs": 19,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "sol",
|
||||
"has_cfg": true,
|
||||
"model": "upstage/solar-mini4:free",
|
||||
"model_err": "",
|
||||
"nfiles": 36,
|
||||
"ndirs": 27,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "spark",
|
||||
"has_cfg": true,
|
||||
"model": "poolside/laguna-xs-2.1:free",
|
||||
"model_err": "",
|
||||
"nfiles": 18,
|
||||
"ndirs": 24,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "spark-snippet-wizard",
|
||||
"has_cfg": false,
|
||||
"model": "",
|
||||
"model_err": "",
|
||||
"nfiles": 10,
|
||||
"ndirs": 13,
|
||||
"status": "PLACEHOLDER"
|
||||
},
|
||||
{
|
||||
"name": "sphinx",
|
||||
"has_cfg": true,
|
||||
"model": "meituan/longcat-2.5-preview:free",
|
||||
"model_err": "",
|
||||
"nfiles": 19,
|
||||
"ndirs": 24,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "timmy",
|
||||
"has_cfg": true,
|
||||
"model": "gpt-5.6-sol",
|
||||
"model_err": "",
|
||||
"nfiles": 21,
|
||||
"ndirs": 25,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "vincent",
|
||||
"has_cfg": true,
|
||||
"model": "gpt-5.6-sol",
|
||||
"model_err": "",
|
||||
"nfiles": 19,
|
||||
"ndirs": 23,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "volt",
|
||||
"has_cfg": true,
|
||||
"model": "deepseek-flash",
|
||||
"model_err": "",
|
||||
"nfiles": 16,
|
||||
"ndirs": 23,
|
||||
"status": "ACTIVE"
|
||||
},
|
||||
{
|
||||
"name": "worker",
|
||||
"has_cfg": true,
|
||||
"model": "stealth/space-bunny-alpha",
|
||||
"model_err": "",
|
||||
"nfiles": 10,
|
||||
"ndirs": 18,
|
||||
"status": "ACTIVE"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
# Sol profile health triage
|
||||
|
||||
Date: 2026-10-24T05:09:48Z | Evidence: `ls /root/.hermes/profiles`; each `config.yaml` parsed for an explicit `default` model.
|
||||
|
||||
## Summary
|
||||
|
||||
| Metric | Count |
|
||||
|---|---|
|
||||
| Total top-level profile entries | 27 |
|
||||
| ACTIVE (installed agent, config model present) | 26 |
|
||||
| STALE (config model empty/error) | 0 |
|
||||
| PLACEHOLDER (no config.yaml) | 1 |
|
||||
|
||||
## Outcome
|
||||
|
||||
- **PLACEHOLDER (1):** spark-snippet-wizard
|
||||
|
||||
- **ACTIVE:** 26 profiles, all with an installed agent model.
|
||||
|
||||
## Active profiles (sorted by name)
|
||||
|
||||
| name | model | files | dirs |
|
||||
|---|---|---|---|
|
||||
| argus | meituan/longcat-2.5-preview:free | 16 | 24 |
|
||||
| beam | reflection/beam-1.0-501b-a23b:free | 16 | 23 |
|
||||
| buzzpilot | gpt-5.6-sol | 23 | 26 |
|
||||
| courtney | deepseek-v4-pro | 12 | 21 |
|
||||
| forge | poolside/laguna-s-2.1:free | 29 | 24 |
|
||||
| home | deepseek-v4-pro | 10 | 19 |
|
||||
| hou3 | stepfun/step-3.7-flash:free | 16 | 22 |
|
||||
| inference-lab | gpt-5.6-sol | 17 | 21 |
|
||||
| kendra | deepseek-v4-pro | 10 | 19 |
|
||||
| ledger | upstage/solar-mini4:free | 19 | 24 |
|
||||
| lilly | deepseek-v4-pro | 12 | 22 |
|
||||
| merlin | stepfun/step-5-preview:free | 17 | 24 |
|
||||
| nightprowl | meituan/longcat-2.0:free | 19 | 22 |
|
||||
| null | meituan/longcat-2.5-preview:free | 19 | 24 |
|
||||
| praetorian | nemotron-3.5-lightning-free | 31 | 27 |
|
||||
| quill | stepfun/step-3.7-flash:free | 18 | 23 |
|
||||
| scribe | meituan/longcat-2.0:free | 18 | 23 |
|
||||
| sentinel | nvidia/nemotron-3.5-super-vl-120b-a12b | 16 | 23 |
|
||||
| sherry | deepseek-v4-pro | 10 | 19 |
|
||||
| sol | upstage/solar-mini4:free | 36 | 27 |
|
||||
| spark | poolside/laguna-xs-2.1:free | 18 | 24 |
|
||||
| sphinx | meituan/longcat-2.5-preview:free | 19 | 24 |
|
||||
| timmy | gpt-5.6-sol | 21 | 25 |
|
||||
| vincent | gpt-5.6-sol | 19 | 23 |
|
||||
| volt | deepseek-flash | 16 | 23 |
|
||||
| worker | stealth/space-bunny-alpha | 10 | 18 |
|
||||
|
||||
## Placeholder profiles
|
||||
|
||||
| name | files | dirs | reason |
|
||||
|---|---|---|---|
|
||||
| spark-snippet-wizard | 10 | 13 | no config.yaml (bare directory) |
|
||||
Reference in new issue
Block a user