CI / checks (push) Skipped
CI / checks (pull_request) Successful in 51s
The thresholds Part H says to tune on the real inference hardware were hardcoded, so every adjustment would have been a PR. They now live in a `tuning:` section of a YAML config file, which also replaces flat environment variables as the home for structure (#32). - The file (NISSE_CONFIG, default ./nisse-dev.yaml) carries structure and holds no secrets: credentials are ${VAR} references resolved from the environment, and a reference to an unset variable is an error - The environment still wins: every existing NISSE_* variable overrides its key, and the file is optional, so .env and CI work unchanged - Validation stays fail-fast and reports every problem at once; unknown keys are errors, so a misspelt knob fails at startup instead of silently doing nothing - The config file joins the state store and .env in the check that refuses to start when they sit inside the workspace clone - Tuning covers the executor's turn and failure limits, the consult budget, the delegation caps, the command timeout and the tool output limit, which Workspace now takes as a setting; the defaults are the values the agent already ran with - llm.max_output_tokens reaches both LLM clients from the config docs/Tuning-Guide.md explains the knobs for someone learning local model tuning: how weights, quantization and the KV cache spend VRAM, what each knob does and what goes wrong at either extreme, and an order to tune in. nisse-dev.example.yaml documents every key and is checked by a test so it cannot drift. Closes #32 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
60 lines
2.9 KiB
YAML
60 lines
2.9 KiB
YAML
# Example configuration for nisse-dev. Copy to nisse-dev.yaml (or point
|
|
# NISSE_CONFIG at your copy) and edit.
|
|
#
|
|
# - Structure lives here. Secrets do not: write them as ${VARIABLE} references,
|
|
# resolved from the environment (or .env) at startup.
|
|
# - Environment variables win. Every NISSE_* variable in .env.example
|
|
# overrides the key noted beside it here.
|
|
# - Keep this file outside the workspace clone. Startup refuses otherwise,
|
|
# because the agent commits and pushes everything in the clone.
|
|
# - Unknown keys are errors, so a misspelt knob fails at startup instead of
|
|
# silently doing nothing.
|
|
|
|
state_db: ~/nisse-demo-workspace/state.db # NISSE_STATE_DB
|
|
workspace: ~/nisse-demo-workspace/project # NISSE_WORKSPACE, the clone
|
|
project: demo # NISSE_PROJECT
|
|
|
|
llm: # A5: LiteLLM is the only LLM destination
|
|
base_url: http://litellm.example:4000 # NISSE_LLM_BASE_URL
|
|
token: ${NISSE_LLM_TOKEN}
|
|
# Ceiling on each response. Must fit inside a local model's context window
|
|
# alongside the prompt; see docs/Tuning-Guide.md.
|
|
max_output_tokens: 16384 # NISSE_MAX_OUTPUT_TOKENS
|
|
|
|
roles: # A11: role -> LiteLLM model alias
|
|
executor: local-fast # NISSE_ROLE_EXECUTOR
|
|
planner: claude-opus-5 # NISSE_ROLE_PLANNER
|
|
delegate: claude-opus-5 # NISSE_ROLE_DELEGATE
|
|
consultant: claude-opus-5 # NISSE_ROLE_CONSULTANT
|
|
|
|
matrix: # A1
|
|
homeserver: https://matrix.example # NISSE_MATRIX_HOMESERVER
|
|
user_id: "@nisse-dev:example" # NISSE_MATRIX_USER_ID
|
|
token: ${NISSE_MATRIX_TOKEN}
|
|
room_id: "!roomid:example" # NISSE_MATRIX_ROOM_ID
|
|
operators: ["@you:example"] # NISSE_MATRIX_OPERATORS (comma-separated)
|
|
|
|
gitea: # B2
|
|
url: https://gitea.example # NISSE_GITEA_URL
|
|
token: ${NISSE_GITEA_TOKEN}
|
|
repo: owner/demo-repo # NISSE_GITEA_REPO
|
|
operators: [your-gitea-login] # NISSE_GITEA_OPERATORS (comma-separated)
|
|
base_branch: main # NISSE_BASE_BRANCH
|
|
|
|
# What each knob does, and how to choose a value: docs/Tuning-Guide.md.
|
|
# These are the defaults; the section can be left out entirely. The file is
|
|
# read at startup, so a change takes effect on the next restart.
|
|
tuning:
|
|
executor:
|
|
max_turns: 24 # model calls per milestone before it stops as capped
|
|
failure_limit: 2 # consecutive failed commands before escalating (A12)
|
|
expert:
|
|
consult_budget: 3 # ask_expert calls per milestone (A14)
|
|
delegation: # hard caps on one delegation (A13)
|
|
max_turns: 30
|
|
max_tokens: 200000
|
|
wall_clock_s: 900
|
|
tools:
|
|
command_timeout_s: 120 # one run_command before it is killed
|
|
max_output_chars: 4000 # tool output kept for the model; the rest is cut
|