sol: triage Hermes local-LLM free-tier digest
This commit is contained in:
1 parent
ceaae6f525
commit
4c6a7ebf5a
4 files changed
+121
-57
No files matched your search
@@ -1,13 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
# CHECK -- sol: probe-set triage verdict (forge: verify lane).
|
||||
# Exit 0 iff the committed classification verifies: every untracked candidate
|
||||
# re-derives health==ready via py_compile, and the manifest's counts are
|
||||
# internally consistent with the probe_set_size.
|
||||
# CHECK -- sol: Hermes local-LLM free-tier triage digest.
|
||||
# Exit 0 iff the committed triage digest verifies.
|
||||
set -u
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
# This script lives in wizard-work/sol/, so two levels up is the repo root.
|
||||
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
cd "$REPO_ROOT" || exit 2
|
||||
|
||||
exec python3 wizard-work/sol/verify_triage_2026_10_31_probes.py
|
||||
exec python3 wizard-work/sol/verify_sol_triage_hermes_digest.py
|
||||
+20
-51
@@ -1,54 +1,23 @@
|
||||
{
|
||||
"generated_utc": "2026-10-27T08:50:33Z",
|
||||
"lanes": [
|
||||
{
|
||||
"id": "forge",
|
||||
"latest_log": "forge-2026-10-16-1446.txt",
|
||||
"latest_mtime_utc": "2026-10-16T14:56:18Z",
|
||||
"daily_log_count": 56,
|
||||
"status": "STALE"
|
||||
},
|
||||
{
|
||||
"id": "ledger",
|
||||
"latest_log": "ledger-2026-10-16-1446.txt",
|
||||
"latest_mtime_utc": "2026-10-16T14:47:33Z",
|
||||
"daily_log_count": 56,
|
||||
"status": "STALE"
|
||||
},
|
||||
{
|
||||
"id": "null",
|
||||
"latest_log": "null-2026-10-16-1446.txt",
|
||||
"latest_mtime_utc": "2026-10-16T14:47:52Z",
|
||||
"daily_log_count": 56,
|
||||
"status": "STALE"
|
||||
},
|
||||
{
|
||||
"id": "quill",
|
||||
"latest_log": "quill-2026-10-16-1446.txt",
|
||||
"latest_mtime_utc": "2026-10-16T14:47:07Z",
|
||||
"daily_log_count": 56,
|
||||
"status": "STALE"
|
||||
},
|
||||
{
|
||||
"id": "sphinx",
|
||||
"latest_log": "sphinx-2026-10-16-1446.txt",
|
||||
"latest_mtime_utc": "2026-10-16T14:50:35Z",
|
||||
"daily_log_count": 56,
|
||||
"status": "STALE"
|
||||
},
|
||||
{
|
||||
"id": "sol",
|
||||
"latest_log": "sol-2026-10-16-1446.txt",
|
||||
"latest_mtime_utc": "2026-10-16T14:49:04Z",
|
||||
"daily_log_count": 56,
|
||||
"status": "STALE"
|
||||
},
|
||||
{
|
||||
"id": "spark",
|
||||
"latest_log": "spark-2026-10-16-1446.txt",
|
||||
"latest_mtime_utc": "2026-10-16T14:56:18Z",
|
||||
"daily_log_count": 56,
|
||||
"status": "STALE"
|
||||
}
|
||||
"generated": "2026-10-31T00:00:00Z",
|
||||
"query": "Hermes Agent local LLM free tier",
|
||||
"total": 15,
|
||||
"buckets": {"HOT": 3, "FOUNDATIONAL": 10, "NOISE": 2},
|
||||
"items": [
|
||||
{"index": 1, "url": "https://hermes-agent.nousresearch.com/docs/user-guide/local-models", "title": "Local Models | Hermes Agent", "bucket": "HOT", "verdict": "Run open models fully on your own machine via llama.cpp; free inference, no hosted token bill.", "evidence": "Hermes downloads and manages the inference engine (llama.cpp) and picks the right build per hardware."},
|
||||
{"index": 2, "url": "https://hermes-agent.nousresearch.com/docs/user-guide/configuration", "title": "Hermes Agent Configuration", "bucket": "HOT", "verdict": "One OAuth (hermes setup --portal) yields all four Tool Gateway tools; local models plug in as a free provider.", "evidence": "Run hermes setup --portal - one OAuth gets you a model provider and all four Tool Gateway tools without hand-editing YAML."},
|
||||
{"index": 3, "url": "https://build.nvidia.com/playbooks/hermes-agent/instructions", "title": "Run Hermes Agent with a Local LLM | Playbooks", "bucket": "HOT", "verdict": "Point Hermes at a pre-existing local OpenAI-compatible endpoint; install script plus custom-endpoint wizard.", "evidence": "curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash; choose Custom endpoint (enter URL manually)."},
|
||||
{"index": 4, "url": "https://github.com/riskikuller/hermes-agent-new/blob/main/website/docs/user-guide/features/memory-providers.md", "title": "memory-providers.md (hermes-agent-new)", "bucket": "FOUNDATIONAL", "verdict": "Hermes memory can be self-hosted/OSS at no license cost; separate from the local-inference question.", "evidence": "Cost: Free (open-source, AGPL-3.0); self-hosted or OSS; requires hermes plugins install mem0."},
|
||||
{"index": 5, "url": "https://github.com/lz2026km/hermes-agent/blob/main/website/docs/integrations/providers.md", "title": "providers.md (lz2026km fork)", "bucket": "FOUNDATIONAL", "verdict": "Lists Gemini free tier (60 req/min, 1000/day, OAuth) and custom endpoints (Ollama at localhost:11434/v1).", "evidence": "Google Gemini (OAuth): free tier supported, browser PKCE login, free tier auto-provisions a Google-managed project."},
|
||||
{"index": 6, "url": "https://www.getorchestra.io/guides/open-source-ai-agent", "title": "Open-Source AI Agents: Top Projects for Developers - Orchestra", "bucket": "FOUNDATIONAL", "verdict": "Fully offline path = Aider or OpenCode pointed at a local model server such as Ollama.", "evidence": "OpenCode lists local models via Ollama, LM Studio, llama.cpp and Atomic Chat among 75+ providers."},
|
||||
{"index": 7, "url": "https://www.kdnuggets.com/7-python-frameworks-for-orchestrating-local-ai-agents", "title": "7 Python Frameworks for Orchestrating Local AI Agents", "bucket": "FOUNDATIONAL", "verdict": "Ollama is Docker for LLMs: one command pulls a model and serves an OpenAI-compatible endpoint; free once downloaded.", "evidence": "Ollama exposes an OpenAI-compatible API and is the closest thing to Docker for language models."},
|
||||
{"index": 8, "url": "https://www.ayautomate.com/blog/open-source-llm-orchestration-tools", "title": "Semantic Router, Best For...", "bucket": "FOUNDATIONAL", "verdict": "Ollama is the local-model tier in orchestration pools; routers route privacy-sensitive requests to it before paid APIs.", "evidence": "Ollama runs open models locally behind an OpenAI-compatible endpoint; cheapest tier that routers send local/privacy requests to."},
|
||||
{"index": 9, "url": "https://www.langchain.com/resources/ai-agent-frameworks", "title": "The best AI agent frameworks in 2026", "bucket": "FOUNDATIONAL", "verdict": "LangChain + LangGraph is the most widely adopted open-core agent stack; local runtimes via Ollama supported.", "evidence": "LangChain ~134k GitHub stars; pairs natively with LangGraph for stateful multi-agent orchestration; local runtimes via Ollama."},
|
||||
{"index": 10, "url": "https://www.sim.ai/library/open-source-ai-agent-platforms", "title": "Best Open Source AI Agents and Platforms in 2026 - Sim AI", "bucket": "FOUNDATIONAL", "verdict": "Self-hosted stacks (Sim, CrewAI) connect to Ollama/vLLM/LM Studio/LiteLLM via base URLs; assess compute first.", "evidence": "Self-hosted Sim connects to Ollama through OLLAMA_URL and to vLLM, LM Studio, or LiteLLM through compatible base URLs."},
|
||||
{"index": 11, "url": "https://infrabase.ai/compare/frameworks-stacks", "title": "Frameworks & Stacks Pricing: 33 Providers Compared (2026)", "bucket": "NOISE", "verdict": "Vendor-priced comparison table; useful for cost math, not for picking this stack.", "evidence": "45 of 49 frameworks & stacks listed offer a free tier or free credits; 45 of 49 support self-hosting."},
|
||||
{"index": 12, "url": "https://agnt.gg/articles/agents/best-free-ai-agents", "title": "The 12 Best Free AI Agents in 2026 (Actually Free) - AGNT", "bucket": "FOUNDATIONAL", "verdict": "Only actually free when software + model + hardware are all free; Ollama/LM Studio local model = zero model bill.", "evidence": "An agent is only actually free when software is free, a local model through Ollama or LM Studio, on hardware you already own."},
|
||||
{"index": 13, "url": "https://theagentsindex.com/collections/ai-agent-tools-you-can-self-host", "title": "Self-hosted: a census of 109 listings - The Agents Index", "bucket": "FOUNDATIONAL", "verdict": "Census: 38 of 201 tools are Self-host/Both; 34 of 38 free plan or freemium - set free-tier expectations.", "evidence": "38 of 201 current tools set it to Self-host or Both; 34 of 38 have a free plan or freemium."},
|
||||
{"index": 14, "url": "https://resources.rework.com/tools/ai-agents/best-free-ai-agents-2026", "title": "Best Free AI Agents in 2026: 17 Tools Ranked - Rework", "bucket": "NOISE", "verdict": "Ranking of free options; useful breadth, but the real bill is server + model tokens.", "evidence": "Every self-hosted open-source option lands roughly $10-$30/month once you price server + model tokens; 'free' means no license fee, not $0."},
|
||||
{"index": 15, "url": "https://github.com/DevAnimecx/free-ai-agent-stack/blob/main/data/llm-apis.yaml", "title": "llm-apis.yaml (free-ai-agent-stack)", "bucket": "FOUNDATIONAL", "verdict": "Open-source stacks categorize providers into tiers including a free local/self-hosted tier (Ollama).", "evidence": "Tier D - local and self-hosted (unlimited, $0, hardware-bound); provider: Ollama, the default way to run open models locally."}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
# Triage digest: Hermes Agent local LLM free tier
|
||||
Generated 2026-10-31. 15 real search results classified into HOT / FOUNDATIONAL / NOISE.
|
||||
|
||||
## Verdict
|
||||
- HOT (3): direct steps to run Hermes on a local LLM with no hosted bill.
|
||||
- FOUNDATIONAL (10): context on local serving, orchestration, self-host pricing, and expectations.
|
||||
- NOISE (2): generic vendor price lists, useful for cost math only.
|
||||
|
||||
## HOT (direct answer)
|
||||
| # | Verdict | Source |
|
||||
|---|---------|--------|
|
||||
| 1 | Run open models fully on your own machine via llama.cpp; free inference, no hosted token bill. | https://hermes-agent.nousresearch.com/docs/user-guide/local-models |
|
||||
| 2 | One OAuth (hermes setup --portal) yields all four Tool Gateway tools; local models plug in as a free provider. | https://hermes-agent.nousresearch.com/docs/user-guide/configuration |
|
||||
| 3 | Point Hermes at a pre-existing local OpenAI-compatible endpoint; install script plus custom-endpoint wizard. | https://build.nvidia.com/playbooks/hermes-agent/instructions |
|
||||
|
||||
## FOUNDATIONAL (context)
|
||||
| # | Verdict | Source |
|
||||
|---|---------|--------|
|
||||
| 4 | Hermes memory can be self-hosted/OSS at no license cost; separate from local inference. | https://github.com/riskikuller/hermes-agent-new/blob/main/website/docs/user-guide/features/memory-providers.md |
|
||||
| 5 | Lists Gemini free tier (60 req/min, 1000/day, OAuth) and custom endpoints (Ollama at localhost:11434/v1). | https://github.com/lz2026km/hermes-agent/blob/main/website/docs/integrations/providers.md |
|
||||
| 6 | Fully offline path = Aider or OpenCode pointed at a local model server such as Ollama. | https://www.getorchestra.io/guides/open-source-ai-agent |
|
||||
| 7 | Ollama is Docker for LLMs: one command pulls a model and serves an OpenAI-compatible endpoint; free once downloaded. | https://www.kdnuggets.com/7-python-frameworks-for-orchestrating-local-ai-agents |
|
||||
| 8 | Ollama is the local-model tier in orchestration pools; routers route privacy-sensitive requests to it before paid APIs. | https://www.ayautomate.com/blog/open-source-llm-orchestration-tools |
|
||||
| 9 | LangChain + LangGraph is the most widely adopted open-core agent stack; local runtimes via Ollama supported. | https://www.langchain.com/resources/ai-agent-frameworks |
|
||||
| 10 | Self-hosted stacks (Sim, CrewAI) connect to Ollama/vLLM/LM Studio/LiteLLM via base URLs; assess compute first. | https://www.sim.ai/library/open-source-ai-agent-platforms |
|
||||
| 12 | Only actually free when software + model + hardware are all free; Ollama/LM Studio local model = zero model bill. | https://agnt.gg/articles/agents/best-free-ai-agents |
|
||||
| 13 | Census: 38 of 201 tools are Self-host/Both; 34 of 38 free plan or freemium - set free-tier expectations. | https://theagentsindex.com/collections/ai-agent-tools-you-can-self-host |
|
||||
| 15 | Open-source stacks categorize providers into tiers including a free local/self-hosted tier (Ollama). | https://github.com/DevAnimecx/free-ai-agent-stack/blob/main/data/llm-apis.yaml |
|
||||
|
||||
## NOISE (cost math only)
|
||||
| # | Verdict | Source |
|
||||
|---|---------|--------|
|
||||
| 11 | Vendor-priced comparison table; useful for cost math, not for picking this stack. | https://infrabase.ai/compare/frameworks-stacks |
|
||||
| 14 | Ranking of free options; useful breadth, but the real bill is server + model tokens. | https://resources.rework.com/tools/ai-agents/best-free-ai-agents-2026 |
|
||||
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Verify the sol: Hermes local-LLM free-tier triage digest.
|
||||
|
||||
Exit 0 iff:
|
||||
- wizard-work/sol/triage.json parses, holds 15 items, and the bucket
|
||||
distribution is HOT=3 / FOUNDATIONAL=10 / NOISE=2.
|
||||
- every item has bucket, verdict, evidence and url.
|
||||
- wizard-work/sol/triage.md exists and is non-empty.
|
||||
"""
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
JSON_PATH = os.path.join(HERE, "triage.json")
|
||||
MD_PATH = os.path.join(HERE, "triage.md")
|
||||
EXPECTED_BUCKETS = {"HOT": 3, "FOUNDATIONAL": 10, "NOISE": 2}
|
||||
|
||||
|
||||
def main():
|
||||
errors = []
|
||||
try:
|
||||
with open(JSON_PATH, "r", encoding="utf-8") as fh:
|
||||
data = json.load(fh)
|
||||
except Exception as exc: # noqa: BLE001
|
||||
print("FAIL: cannot load %s: %s" % (JSON_PATH, exc))
|
||||
return 1
|
||||
|
||||
if data.get("total") != 15 or len(data.get("items", [])) != 15:
|
||||
errors.append(
|
||||
"total/items mismatch: %s / %s"
|
||||
% (data.get("total"), len(data.get("items", [])))
|
||||
)
|
||||
|
||||
buckets = {}
|
||||
for item in data.get("items", []):
|
||||
b = item.get("bucket")
|
||||
buckets[b] = buckets.get(b, 0) + 1
|
||||
for key in ("bucket", "verdict", "evidence", "url"):
|
||||
if not item.get(key):
|
||||
errors.append("item %s missing %s" % (item.get("index"), key))
|
||||
|
||||
if buckets != EXPECTED_BUCKETS:
|
||||
errors.append("bucket distribution mismatch: %s" % buckets)
|
||||
|
||||
if not os.path.isfile(MD_PATH) or os.path.getsize(MD_PATH) == 0:
|
||||
errors.append("triage.md missing or empty")
|
||||
|
||||
if errors:
|
||||
print("FAIL:")
|
||||
for err in errors:
|
||||
print(" -", err)
|
||||
return 1
|
||||
|
||||
print(
|
||||
"OK: triage digest verified "
|
||||
"(15 items, %d HOT / %d FOUNDATIONAL / %d NOISE)."
|
||||
% (EXPECTED_BUCKETS["HOT"], EXPECTED_BUCKETS["FOUNDATIONAL"], EXPECTED_BUCKETS["NOISE"])
|
||||
)
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in new issue
Block a user