CI / build (push) Has been cancelled
runnable-test-suite (parent) — complete. Three sub-tasks all complete: - make-tests-runnable: add requirements.txt pinning pytest==7.4.4, sweep all docs/prompts from bare 'python' to 'python3' (stock macOS/Windows ships python3), add idempotent .venv install block to scripts/install.sh, and add 'from __future__ import annotations' to 3 dashboard modules using PEP 604 union syntax at definition time so they import on Python 3.9+. The PEP 604 bug was caught by the streak verifier itself during implementation. - vram-detect-cross-platform: scripts/vram_detect.py now branches on platform.system() for Linux/Darwin/Windows. macOS path uses system_profiler SPDisplaysDataType (Apple Silicon unified memory via sysctl hw.memsize; Intel Macs via 'VRAM (Total):'). Windows uses wmic path win32_VideoController get AdapterRAM with PowerShell fallback. Linux /proc/meminfo and nvidia-smi/lspci paths unchanged (regression test locks them). Added 14 local-LLM context-window entries (llama-3.1, qwen2.5, mistral, deepseek-r1/v3, glm-4/4.5, gemma-2, phi-3/4) with source-cited model cards. Added _probe_ollama_model() that runs 'ollama list' as a last-resort fallback. run_command() now wraps PowerShell cmdlets on Windows (['powershell', '-NoProfile', '-NoLogo', '-Command', ...]). - vram-detect-cross-platform-tests: 11 new monkeypatched tests in tests/test_vram_detect.py covering Linux/Darwin/Windows branches for detect_ram and detect_gpu_vram, prefix-match for unknown model names, ollama probe, Windows PowerShell wrapper, and a LOCKED regression test for _detect_ram_linux(). All external subprocess/sysctl/wmic calls are mocked; no live hardware probes. Suite total: 235 passed, 0 errors. Verified on this box: gpu_vram_gb 0 -> 32 on Apple M5 (32GB unified memory), target context correctly jumped 12k -> 42k. Subtask-2 implementation was authored by local LLM (gemma-4-26B-A4B-it via headroom proxy @ localhost:8787). The 10-consecutive-clean-pass streak verifier ran as the independent checker model (article #2/#9/#13 in 'WTF Is a Loop? Part 2'). One anti-spin rail fired: local LLM produced inline branches where subtask-3 tests expected private _detect_ram_linux() helper; extracted helper to match the test contract without weakening tests. Parent + all 3 subtasks complete. Prior opencode-subagent implementation of subtask-2 preserved in git stash for reference.
79 lines
3.2 KiB
Bash
Executable File
79 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
FRAMEWORK_DIR="$HOME/.automaton"
|
|
|
|
if [ -d "$FRAMEWORK_DIR" ]; then
|
|
echo "automaton already installed at $FRAMEWORK_DIR"
|
|
echo "Run './update.sh' to update."
|
|
else
|
|
echo "Cloning automaton to $FRAMEWORK_DIR..."
|
|
git clone http://10.37.0.86:3003/hermes/automaton "$FRAMEWORK_DIR"
|
|
|
|
echo ""
|
|
echo "=== VRAM / Context Detection ==="
|
|
echo "Detecting your system's VRAM to recommend task decomposition settings..."
|
|
echo ""
|
|
|
|
# Run VRAM detection script if it exists
|
|
if [ -f "$FRAMEWORK_DIR/scripts/vram_detect.py" ]; then
|
|
# Run in project-dir context so it can read framework overhead
|
|
detection_output=$(cd "$FRAMEWORK_DIR" && python3 "$FRAMEWORK_DIR/scripts/vram_detect.py" 2>&1)
|
|
|
|
# Extract JSON output (the block after "=== JSON Output ===")
|
|
json_output=$(echo "$detection_output" | sed -n '/=== JSON Output ===/,$p' | tail -n +2)
|
|
|
|
if [ -n "$json_output" ]; then
|
|
echo "$detection_output"
|
|
|
|
# Extract key values from JSON using Python
|
|
recommended_k=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["recommended_k"])')
|
|
max_peak_kb=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["max_peak_context_kb"])')
|
|
headroom=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["headroom"])')
|
|
gpu_vram=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["gpu_vram_gb"])')
|
|
ram_gb=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["ram_gb"])')
|
|
model_context=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["model_context_kb"])')
|
|
|
|
echo ""
|
|
echo "=== Recommended VRAM Configuration ==="
|
|
echo "For low-VRAM systems (8GB, 16GB VRAM), add this to ~/.automaton/config.md:"
|
|
echo ""
|
|
echo "## VRAM Configuration"
|
|
echo "- **Auto-detect**: Yes # Let the agent detect automatically"
|
|
echo "- **Target context**: ${recommended_k}k tokens # Override auto-detect if needed"
|
|
echo "- **Headroom**: ${headroom}%"
|
|
echo "- **Max peak context per sub-task**: $((max_peak_kb / 1000))k tokens"
|
|
echo ""
|
|
echo "This ensures tasks are decomposed into sub-tasks that fit within your"
|
|
echo "available VRAM. For more information, see the README."
|
|
else
|
|
echo "Could not detect VRAM. You can manually set your VRAM configuration in ~/.automaton/config.md."
|
|
echo "See the README for details."
|
|
fi
|
|
else
|
|
echo "VRAM detection script not found. You can manually set your VRAM configuration in ~/.automaton/config.md."
|
|
echo "See the README for details."
|
|
fi
|
|
|
|
echo ""
|
|
echo "Installation complete."
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. cd into a project and run the onboarding prompt"
|
|
echo " 2. In each project that uses git, install the automaton hooks:"
|
|
echo " bash ~/.automaton/scripts/install-hooks.sh /path/to/project"
|
|
echo ""
|
|
echo "These hooks block commits and pushes when no task is in an edit-allowed phase."
|
|
echo ""
|
|
|
|
# Register pre-edit guards for detected harnesses
|
|
bash "$FRAMEWORK_DIR/scripts/register-guards.sh"
|
|
|
|
fi
|
|
|
|
# --- Python deps (idempotent) ---
|
|
if [ ! -d ".venv" ]; then
|
|
python3 -m venv .venv
|
|
fi
|
|
.venv/bin/pip install --quiet --upgrade pip
|
|
.venv/bin/pip install --quiet -r requirements.txt |