iop/configs/edge.yaml

274 lines
9.3 KiB
YAML

edge:
id: "edge-example"
name: "Example Edge"
server:
listen: "0.0.0.0:9090"
# advertise_host is the host other components (Node bootstrap, OpenAI client)
# use to reach this edge. Empty means resolve automatically from interfaces.
advertise_host: ""
# bootstrap is the artifact/bootstrap channel iop-edge can render in
# bootstrap commands and `env` output. Leave artifact_base_url empty until a
# field channel is provisioned.
bootstrap:
artifact_base_url: ""
tls:
enabled: false
logging:
level: "info"
pretty: true
# path is the edge log file. Empty falls back to <binary-dir>/logs/edge.log
# for the bundled dev binary; explicit values win.
path: ""
metrics:
port: 19092
# control_plane connects this Edge to a Control Plane instance.
# Set enabled: true and wire_addr to the Control Plane TCP endpoint to
# activate the outbound connector. Leave enabled: false (default) for
# standalone / local-only Edge deployments.
control_plane:
enabled: false
wire_addr: ""
reconnect_interval_sec: 5
# refresh enables the Edge-local admin API used by `iop-edge config refresh`.
# Keep it loopback-only unless an operator-specific access control layer is added.
refresh:
enabled: false
listen: "127.0.0.1:19093"
a2a:
enabled: false
listen: "0.0.0.0:8081"
path: "/a2a"
node: ""
adapter: "cli"
session_id: "a2a"
timeout_sec: 120
bearer_token: ""
openai:
enabled: false
listen: "0.0.0.0:18081"
bearer_token: ""
node: ""
adapter: "ollama"
target: ""
models: []
# model_routes is the current compatibility route catalog. It maps external
# model ids to internal adapter/target routing.
# When set, /v1/models exposes these ids and /v1/chat/completions + /v1/responses
# resolve adapter/target per-entry. Entries not matched fall back to target/adapter above.
# workspace_required: true marks CLI agent routes that require a workspace path from the caller.
# max_queue and queue_timeout_ms configure the Edge-owned queue policy for the model alias.
#
# Provider-pool migration direction:
# - Keep the external model id as the future models[].id canonical routing key.
# - Represent a 1:1 model_route as one models[] entry with one provider id.
# - Use the route target as models[].providers[provider_id], the concrete served model.
# - Continue sending adapter + target to Node after Edge rewrites the selected provider target.
# model_routes (legacy/adapter/type reference):
# - model: "codex"
# adapter: "cli"
# target: "codex"
# workspace_required: true
# - model: "llama3"
# adapter: "ollama"
# target: "llama3:8b"
# max_queue: 10
# queue_timeout_ms: 30000
#
# # adapter: "vllm" — legacy path: node runs the built-in vllm adapter
# # (direct HTTP-to-vLLM-engine). Deprecated/discouraged for new deploys.
# # New deploys should use openai_compat adapter with provider="vllm"
# # instead, so that auth/headers/options can be configured per-route.
# - model: "qwen3"
# adapter: "vllm" # legacy — prefer openai_compat+provider:vllm
# target: "qwen3-72b"
# node: "node-gpu-01"
#
# - model: "lemonade"
# adapter: "openai_compat"
# target: "lemonade-served-model"
# node: "node-lemonade-01"
#
# Legacy/compatibility adapter-backed provider override example:
# Use only when explicit adapter instance override or compatibility before compilation is required.
# - alias: "qwen3.6:35b", served model: "nvidia/Qwen3.6-35B-A3B-NVFP4"
# model_routes:
# - model: "qwen3.6:35b"
# adapter: "openai_compat"
# target: "nvidia/Qwen3.6-35B-A3B-NVFP4"
# node: "node-vllm-01"
# max_queue: 10
# queue_timeout_ms: 30000
#
# === Provider-pool (models[] / nodes[].providers[]) example (recommended) ===
# Top-level models[] defines canonical routing keys and their provider-pool mapping.
# Each entry id is the external model id; providers map maps provider id → served model.
# models:
# - id: "qwen3.6:35b"
# display_name: "Qwen 3.6 35B"
# providers:
# vllm-gpu: "nvidia/Qwen3.6-35B-A3B-NVFP4"
# ollama-local: "qwen3.6:35b"
#
# nodes[].providers[] defines each provider candidate with catalog and execution fields (Provider-First).
# nodes[].providers[].id is the stable provider identity referenced by models[].providers keys.
# nodes[].providers[].type — runtime type (vllm, ollama, lemonade, sglang, openai_api, cli).
# nodes[].providers[].category — "api", "cli", or "local_inference".
# nodes[].providers[].endpoint / base_url / command — type-specific execution fields.
# nodes[].providers[].models — served model names this provider can serve.
# nodes[].providers[].health — observed health state string.
# nodes[].providers[].capacity — provider-pool max concurrent execution slots; 0 is not dispatchable.
# nodes[].providers[].max_queue — max queue depth (per-provider).
# nodes[].providers[].queue_timeout_ms — queue timeout in milliseconds.
# nodes[].providers[].lifecycle_capabilities — coarse lifecycle capabilities list.
# nodes[].providers[].enabled — on/off dispatch switch; omit or true = enabled, false = excluded from
# dispatch pool. Disabled providers appear in status with status=disabled, capacity=0. Does not
# stop adapter processes. Classified as live-apply (no restart required) on config refresh.
#
# Example node with provider pool (Provider-First, recommended):
# nodes:
# - id: "node-gpu-01"
# alias: "gpu-node"
# providers:
# - id: "vllm-gpu"
# type: "vllm"
# category: "api"
# endpoint: "http://127.0.0.1:8000/v1"
# models:
# - "nvidia/Qwen3.6-35B-A3B-NVFP4"
# health: "healthy"
# capacity: 4
# max_queue: 16
# queue_timeout_ms: 30000
# request_timeout_ms: 120000
# lifecycle_capabilities: ["scale_up", "scale_down"]
# # enabled: false # set to exclude this provider from dispatch pool (live-apply)
# - id: "ollama-local"
# type: "ollama"
# category: "local_inference"
# base_url: "http://127.0.0.1:11434"
# models:
# - "qwen3.6:35b"
# health: "healthy"
# capacity: 2
# max_queue: 8
# queue_timeout_ms: 30000
#
# # Legacy/compatibility adapter-backed provider override setup (discouraged for new deployments):
# - id: "node-vllm-01"
# alias: "vllm-gpu-node"
# token: "<node-token>"
# adapters:
# openai_compat_instances:
# - name: "vllm-gpu"
# enabled: true
# provider: "vllm"
# endpoint: "http://127.0.0.1:8000/v1"
# capacity: 4
# max_queue: 16
# queue_timeout_ms: 30000
# request_timeout_ms: 120000
# providers:
# - id: "vllm-gpu-legacy"
# type: "vllm"
# category: "api"
# adapter: "vllm-gpu"
# models:
# - "nvidia/Qwen3.6-35B-A3B-NVFP4"
session_id: "openai"
timeout_sec: 120
strict_output: true
strict_stream_buffer: false
console:
adapter: "cli"
target: "codex"
session_id: "default"
background: false
timeout_sec: 240
nodes:
# id is the stable node identity; omitting it falls back to an auto UUID (dev only).
# agent_kind selects the registration kind; omitting it defaults to "generic-node".
# Allowed values: "generic-node" (default).
#
# Provider-First example (recommended):
- id: "node-example-01"
alias: "example-node"
token: "<node-token>"
agent_kind: "generic-node"
providers:
- id: "claude-tui"
type: "cli"
category: "cli"
command: "claude"
args:
- "--dangerously-skip-permissions"
env:
- "TERM=xterm-256color"
mode: "persistent-lazy"
capacity: 1
- id: "codex"
type: "cli"
category: "cli"
command: "codex"
args:
- "app-server"
mode: "codex-app-server"
capacity: 1
- id: "codex-exec"
type: "cli"
category: "cli"
command: "codex"
args:
- "exec"
- "--json"
resume_args:
- "exec"
- "resume"
- "--json"
output_format: "codex-json"
mode: "codex-exec"
capacity: 1
# Legacy adapters configuration (compat override example):
# adapters:
# cli:
# enabled: true
# profiles:
# claude-tui:
# command: "claude"
# args:
# - "--dangerously-skip-permissions"
# env:
# - "TERM=xterm-256color"
# persistent: true
# terminal: true
# response_idle_timeout_ms: 5000
# startup_idle_timeout_ms: 5000
# mode: "persistent-lazy"
# codex:
# command: "codex"
# args:
# - "app-server"
# mode: "codex-app-server"
# codex-exec:
# command: "codex"
# args:
# - "exec"
# - "--json"
# resume_args:
# - "exec"
# - "resume"
# - "--json"
# output_format: "codex-json"
# mode: "codex-exec"
runtime:
concurrency: 1