d68ee60182
User-Idee 06.07.: das grosse Modell NICHT im heissen Pfad, sondern als naechtlicher Gutachter (04:30) — Kaltladen ist dann egal, Lucy bleibt tagsueber schnell. Feed sammelt 24h-Beweise (Vorschlags-Branches, main- Commits, Vault-Notizen, Journal-Warnungen, Insights), der Richter laeuft als Ein-Schuss-Completion gegen llama-swap (fremdblick-Architektur). Richter-Kette: gpt-oss-120b -> GLM-4.6V-Flash als gekennzeichnete Vertretung (gpt-oss wirft neben dem Warm-Set weiterhin 'exited prematurely', E2E 07.07. verifiziert). Bote = Cron-Agent mit striktem Treu-Wiedergeben-Mandat (chef-gutachter-prompt.md), Ausfall wird ehrlich gemeldet statt verschwiegen. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
85 lines
4.0 KiB
Bash
85 lines
4.0 KiB
Bash
#!/usr/bin/env bash
|
|
# Chef-Gutachter-Feed (Orchestrator-Finale, User-Idee 06.07.): gpt-oss-120b als NÄCHTLICHER
|
|
# Chef-Gutachter über die autonome Arbeit der Box — bewusst NIE im heißen Pfad (Kaltladen
|
|
# ~2-5 min ist um 04:30 egal; tagsüber bleibt Lucy schnell). Muster wie dreaming-feed.sh:
|
|
# liegt in ~/.hermes/scripts/, stdout wird dem Cron-Agenten als Prompt eingespeist.
|
|
# Der eigentliche RICHTER läuft als Ein-Schuss-Completion direkt gegen llama-swap (:8080,
|
|
# fremdblick-Architektur — umgeht Hermes' Delegations-Floor und braucht keinen Subagenten).
|
|
# Richter-Kette: gpt-oss-120b; wirft der beim Laden "exited prematurely" (neben dem Warm-Set
|
|
# live gesehen, E2E 07.07.), übernimmt GLM-4.6V-Flash als gekennzeichnete VERTRETUNG.
|
|
set -uo pipefail
|
|
|
|
ENDPOINT="${CHEF_ENDPOINT:-http://127.0.0.1:8080/v1/chat/completions}"
|
|
CHEF="${CHEF_MODEL:-gpt-oss-120b}"
|
|
VERTRETUNG="${CHEF_FALLBACK:-GLM-4.6V-Flash}"
|
|
MC="$HOME/mission-control-v2"
|
|
VAULT="$HOME/wissens-vault"
|
|
|
|
# ---------- Versionierter Auftrag für den Boten-Agenten ----------
|
|
cat "$MC/deploy/chef-gutachter-prompt.md"
|
|
echo
|
|
|
|
# ---------- Beweismaterial der letzten 24 h (hart begrenzt, erst sammeln, dann kürzen) ----------
|
|
EVID="$(
|
|
echo "## BEWEISMATERIAL (automatisch erhoben am $(date '+%d.%m.%Y %H:%M'))"
|
|
echo
|
|
echo "### Vorschlags-Branches (Werkstatt/Orchestrator, jüngste zuerst):"
|
|
git -C "$MC" fetch -q origin 2>/dev/null || true
|
|
git -C "$MC" for-each-ref --sort=-committerdate refs/remotes/origin \
|
|
--format='%(committerdate:relative) | %(refname:short) | %(subject)' 2>/dev/null | head -10
|
|
echo
|
|
echo "### main-Commits der letzten 24 h:"
|
|
git -C "$MC" log --since='24 hours ago' --oneline origin/main 2>/dev/null | head -12
|
|
echo
|
|
echo "### Wissens-Vault (neue Traum-Notizen, 24 h):"
|
|
git -C "$VAULT" log --since='24 hours ago' --name-only --pretty='— %s' 2>/dev/null | head -20
|
|
echo
|
|
echo "### Betriebs-Warnungen (journal, 24 h, je Dienst gezählt):"
|
|
journalctl --user --since '24 hours ago' -p warning --no-pager 2>/dev/null \
|
|
| grep -oE 'hermes-gateway|mission-control-2|mem0-service|voice-service|hermes-builtin-ui' \
|
|
| sort | uniq -c | sort -rn | head -6
|
|
echo
|
|
echo "### Aktivitäts-Insights (1 Tag):"
|
|
bash -lc 'hermes insights --days 1' 2>/dev/null | sed 's/\x1b\[[0-9;]*m//g' | head -30
|
|
)"
|
|
|
|
RASTER='Du bist der CHEF-GUTACHTER über die autonome Arbeit einer lokalen KI-Box (Hermes-Agent, Werkstatt, Orchestrator, Traum-Kreislauf). Du bekommst BEWEISMATERIAL der letzten 24 Stunden. Urteile AUSSCHLIESSLICH auf Basis dieses Materials — kein Lob und keine Behauptung ohne konkreten Beleg darin; fehlt dir zu einem Punkt Material, sage das offen. Antworte auf DEUTSCH, kompakt, in exakt dieser Struktur:
|
|
VERDIKT: <ein Satz Gesamturteil über die autonome Arbeit der Nacht/des Tages>
|
|
RISIKEN: <0-3 Punkte, je mit Beleg aus dem Material; "keine erkennbar" wenn leer>
|
|
TOP-3 FUER DEN COMMANDER: <maximal 3 priorisierte, konkrete Empfehlungen — weniger ist ok, erfinde keine>'
|
|
|
|
# Ein-Schuss-Richter: $1=Modell-ID $2=curl-Timeout $3=max_tokens
|
|
judge() {
|
|
local req
|
|
req="$(jq -n --arg m "$1" --arg sys "$RASTER" --arg usr "$EVID" --argjson mt "$3" \
|
|
'{model:$m, messages:[{role:"system",content:$sys},{role:"user",content:$usr}],
|
|
max_tokens:$mt, temperature:0.2}')"
|
|
curl -s -m "$2" "$ENDPOINT" -H 'Content-Type: application/json' --data-binary "$req" \
|
|
| python3 -c '
|
|
import json, sys
|
|
try:
|
|
d = json.load(sys.stdin)
|
|
msg = d["choices"][0]["message"]
|
|
out = (msg.get("content") or msg.get("reasoning_content") or "").strip()
|
|
print(out)
|
|
except Exception:
|
|
pass'
|
|
}
|
|
|
|
RICHTER="$CHEF"
|
|
VERDIKT="$(judge "$CHEF" 420 2600)"
|
|
if [ -z "${VERDIKT// /}" ]; then
|
|
RICHTER="$VERTRETUNG (Vertretung — $CHEF hat nicht geladen)"
|
|
VERDIKT="$(judge "$VERTRETUNG" 240 1200)"
|
|
fi
|
|
|
|
echo "$EVID"
|
|
echo
|
|
if [ -z "${VERDIKT// /}" ]; then
|
|
echo "## CHEF-VERDIKT: AUSGEFALLEN"
|
|
echo "Beide Richter ($CHEF, $VERTRETUNG) haben nicht geantwortet — das dem Commander ehrlich melden."
|
|
else
|
|
echo "## CHEF-VERDIKT (Richter: $RICHTER)"
|
|
echo "$VERDIKT"
|
|
fi
|