molecule-ai-workspace-templ.../config.yaml
rabbitblood e76c9888de config: declare provision_timeout_seconds=720 for canvas ProvisioningTimeout
Closes Phase 3 of Molecule-AI/molecule-core#2054.

Phase 1 (canvas, #2092 MERGED) plumbed provision_timeout_ms through
the canvas socket → node-data → ProvisioningTimeout resolver.
Phase 2 (workspace-server, #2094 MERGED) read the field from
template config.yaml and surfaced it in the workspace API response.
This commit completes the chain: declare the value HERE so the
canvas banner threshold for hermes flows from this template
manifest, not from the canvas-side hardcoded RUNTIME_PROFILES map.

720s rationale: hermes installs ripgrep + ffmpeg + node22 + builds
hermes-agent from source + pulls Playwright + Chromium (~300MB).
Staging EC2 cold boots routinely land at 8-13 min. 720s aligns with
the SaaS E2E PROVISION_TIMEOUT_SECS=900 so the UI warning surfaces
shortly before the backend itself gives up. Without this declaration,
canvas falls back to its 2-min default and false-alarms on every
fresh hermes provision.

Follow-up (separate canvas PR): remove RUNTIME_PROFILES.hermes from
canvas/src/lib/runtimeProfiles.ts now that the value flows
server-side.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 07:09:22 -07:00

228 lines
10 KiB
YAML

name: Hermes Agent
description: >-
Nous Research hermes-agent — the self-improving AI agent with built-in
terminal, file ops, web search, memory, skills, and cross-session recall.
This workspace runs the real `hermes-agent` (github.com/NousResearch/hermes-agent)
behind an A2A bridge. The agent exposes its OpenAI-compatible API on
localhost:8642 and molecule_runtime proxies messages to it on :8000.
Supports every provider hermes-agent supports — see docs/CONFIGURATION.md
for the full list. Any model hermes-agent accepts is selectable at
runtime via `hermes model`, or from the canvas Config tab.
version: 2.1.0
tier: 2
runtime: hermes
runtime_config:
# Default model. hermes-agent owns provider resolution via the
# HERMES_INFERENCE_PROVIDER env or its own `hermes model` wizard.
# Override per-workspace in the canvas Config tab.
model: nousresearch/hermes-4-70b
# Canvas surfaces this list as a Model dropdown and auto-populates
# Required Env Vars from the selected entry's required_env. Provider
# names in parentheses mirror hermes-agent's CLI provider field; see
# docs/CONFIGURATION.md#provider-matrix for the full mapping.
models:
# ── Nous Research (Hermes 4) via Nous Portal ──────────────────────
- id: nousresearch/hermes-4-70b
name: Hermes 4 70B (Nous Portal)
required_env: [HERMES_API_KEY]
- id: nousresearch/hermes-4-405b
name: Hermes 4 405B (Nous Portal)
required_env: [HERMES_API_KEY]
- id: nousresearch/hermes-4-14b
name: Hermes 4 14B (Nous Portal)
required_env: [HERMES_API_KEY]
# ── Hermes 3 family (via OpenRouter) ─────────────────────────────
- id: nousresearch/hermes-3-llama-3.1-70b
name: Hermes 3 70B (OpenRouter)
required_env: [OPENROUTER_API_KEY]
- id: nousresearch/hermes-3-llama-3.1-405b
name: Hermes 3 405B (OpenRouter)
required_env: [OPENROUTER_API_KEY]
# ── Anthropic (native SDK inside hermes-agent) ────────────────────
- id: anthropic/claude-sonnet-4-5
name: Claude Sonnet 4.5 (direct)
required_env: [ANTHROPIC_API_KEY]
- id: anthropic/claude-opus-4-1
name: Claude Opus 4.1 (direct)
required_env: [ANTHROPIC_API_KEY]
- id: anthropic/claude-haiku-4-5
name: Claude Haiku 4.5 (direct)
required_env: [ANTHROPIC_API_KEY]
# ── OpenAI (via OpenRouter — hermes has no direct openai provider;
# openai-codex is OAuth-only for Codex models) ──────────────────
- id: openai/gpt-5
name: GPT-5 (via OpenRouter)
required_env: [OPENROUTER_API_KEY]
- id: openai/gpt-5-mini
name: GPT-5 mini (via OpenRouter)
required_env: [OPENROUTER_API_KEY]
- id: openai/gpt-4o
name: GPT-4o (via OpenRouter)
required_env: [OPENROUTER_API_KEY]
- id: openai/gpt-4o-mini
name: GPT-4o mini (via OpenRouter)
required_env: [OPENROUTER_API_KEY]
# ── Google Gemini (native SDK) ────────────────────────────────────
- id: gemini/gemini-2.5-pro
name: Gemini 2.5 Pro (direct)
required_env: [GEMINI_API_KEY]
- id: gemini/gemini-2.5-flash
name: Gemini 2.5 Flash (direct)
required_env: [GEMINI_API_KEY]
# ── DeepSeek (direct) ─────────────────────────────────────────────
- id: deepseek/deepseek-v3.2
name: DeepSeek V3.2 (direct)
required_env: [DEEPSEEK_API_KEY]
- id: deepseek/deepseek-r1
name: DeepSeek R1 reasoning (direct)
required_env: [DEEPSEEK_API_KEY]
# ── z.ai / GLM ────────────────────────────────────────────────────
- id: zai/glm-4.6
name: GLM 4.6 (z.ai)
required_env: [GLM_API_KEY]
# ── Kimi / Moonshot ───────────────────────────────────────────────
- id: kimi-coding/kimi-k2
name: Kimi K2 (Moonshot)
required_env: [KIMI_API_KEY]
# ── MiniMax (global + China) ─────────────────────────────────────
- id: minimax/MiniMax-M2.7
name: MiniMax M2.7 (direct, coding-tuned)
required_env: [MINIMAX_API_KEY]
- id: minimax/MiniMax-M2.7-highspeed
name: MiniMax M2.7 highspeed (Token Plan only)
required_env: [MINIMAX_API_KEY]
- id: minimax/MiniMax-M1
name: MiniMax M1 (1M ctx)
required_env: [MINIMAX_API_KEY]
- id: minimax-cn/abab6.5-chat
name: MiniMax China (abab6.5)
required_env: [MINIMAX_CN_API_KEY]
# ── Alibaba Cloud / Qwen (DashScope) ─────────────────────────────
- id: alibaba/qwen3-max
name: Qwen 3 Max (Alibaba Cloud)
required_env: [DASHSCOPE_API_KEY]
- id: alibaba/qwen3-coder
name: Qwen 3 Coder (Alibaba Cloud)
required_env: [DASHSCOPE_API_KEY]
# ── Xiaomi MiMo ──────────────────────────────────────────────────
- id: xiaomi/mimo-v1
name: Xiaomi MiMo v1
required_env: [XIAOMI_API_KEY]
# ── Arcee Trinity ────────────────────────────────────────────────
- id: arcee/trinity-70b
name: Arcee Trinity 70B
required_env: [ARCEEAI_API_KEY]
# ── NVIDIA NIM ────────────────────────────────────────────────────
- id: nvidia/nemotron-70b
name: Nemotron 70B (NVIDIA NIM)
required_env: [NVIDIA_API_KEY]
# ── Ollama Cloud ─────────────────────────────────────────────────
- id: ollama-cloud/llama-3.3-70b
name: Llama 3.3 70B (Ollama Cloud)
required_env: [OLLAMA_API_KEY]
# ── Hugging Face Inference ───────────────────────────────────────
- id: huggingface/*
name: Any Hugging Face model (set ID per workspace)
required_env: [HF_TOKEN]
# ── Vercel AI Gateway ────────────────────────────────────────────
- id: ai-gateway/*
name: Any Vercel AI Gateway model
required_env: [AI_GATEWAY_API_KEY]
# ── OpenCode Zen / Go ────────────────────────────────────────────
- id: opencode-zen/*
name: OpenCode Zen (set model per workspace)
required_env: [OPENCODE_ZEN_API_KEY]
- id: opencode-go/*
name: OpenCode Go (set model per workspace)
required_env: [OPENCODE_GO_API_KEY]
# ── Kilo Code ────────────────────────────────────────────────────
- id: kilocode/*
name: Kilo Code (set model per workspace)
required_env: [KILOCODE_API_KEY]
# ── OpenRouter catch-all ─────────────────────────────────────────
- id: openrouter/*
name: Any OpenRouter model (200+ available)
required_env: [OPENROUTER_API_KEY]
# ── Custom endpoint (LM Studio / Ollama local / vLLM / llama.cpp) ─
- id: custom/*
name: Self-hosted OpenAI-compat endpoint (configure base_url in ~/.hermes/config)
required_env: []
# No single required env — hermes-agent supports 20+ providers and
# customers pick any one via the canvas Config tab (per-model
# required_env above drives the real UX). Molecule-runtime's
# preflight enforces AND-semantics on this list, so a non-empty
# value here would block workspaces using any non-default provider.
# hermes-agent itself errors loud at request time if zero providers
# are configured — that's the safety net.
required_env: []
# 0 = no timeout; hermes-agent sessions can run long when tool-using.
timeout: 0
# Cold-boot expectation surfaced to the canvas ProvisioningTimeout
# banner (Molecule-AI/molecule-core#2054). Hermes installs ripgrep +
# ffmpeg + node22 + builds hermes-agent from source + pulls Playwright
# + Chromium (~300MB), so cold boots routinely land at 8-13 min on
# staging EC2. 720s aligns with the SaaS E2E PROVISION_TIMEOUT_SECS=900
# so the UI warning surfaces shortly before the backend itself gives
# up. Without this declaration, canvas falls back to its 2-min default
# and false-alarms on every fresh hermes provision.
provision_timeout_seconds: 720
# Tools hermes-agent ships natively. See `hermes tools` inside the
# container for the interactive toggle — by default all 17 built-in
# tool families are available (terminal, file read/write/edit,
# web fetch+search, memory, skills, subagent spawn, etc.).
skills: []
a2a:
port: 8000
streaming: true
push_notifications: true
# Bridge config — consumed by executor.py and start.sh.
bridge:
# Where the in-container hermes-agent API server listens. Do NOT
# change unless you also change start.sh / API_SERVER_PORT.
hermes_api_base: http://127.0.0.1:8642/v1
# Bearer token is injected by start.sh as API_SERVER_KEY and read by
# executor.py from the env at request time — not stored in config.
hermes_api_key_env: API_SERVER_KEY
# Optional: force a specific hermes provider instead of relying on
# hermes-agent's `auto` detection. Useful when multiple keys are
# set and you want deterministic routing. Set via HERMES_INFERENCE_PROVIDER
# env on the container OR hardcode here. Valid values: see
# docs/CONFIGURATION.md#provider-matrix.
provider: ""
delegation:
retry_attempts: 3
retry_delay: 5
timeout: 120
escalate: true
template_schema_version: 1