CI / checks (push) Skipped
CI / checks (pull_request) Successful in 1m16s
Two setup failures found while calibrating the new benchmark tasks, both of which would also fail real milestones. Devstral's chat template (Mistral) rejected any turn in which the model wrote some text before a tool call: the OpenAI renderer made one message per event, so the turn became a text message and a tool-call message in a row, and llama.cpp answered 500. The renderer now folds consecutive user or assistant messages into one, which is the OpenAI format for a turn anyway. Checked against the live server: the captured failing request no longer occurs, over six real runs. LiteLLMClient gave up on any request after a fixed 120 s. A dense 27B model writing a whole module in one turn takes longer, so the executor escalated work that was going well. llm.request_timeout_s now sets it for both clients, default 600. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
64 lines
2.8 KiB
YAML
64 lines
2.8 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, see .env.example) at startup.
|
|
# - 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
|
|
workspace: ~/nisse-demo-workspace/project # the clone
|
|
project: demo
|
|
|
|
llm: # A5: LiteLLM is the only LLM destination
|
|
base_url: http://litellm.example:4000
|
|
token: ${NISSE_LLM_TOKEN}
|
|
# Ceiling on each response. The model's own max_output_tokens in LiteLLM
|
|
# caps it further, which is where to hold a local model to less.
|
|
max_output_tokens: 16384
|
|
# How long one request may take before it is abandoned. A safety net for a
|
|
# hung connection; slow local models can take minutes over a long answer.
|
|
request_timeout_s: 600
|
|
|
|
roles: # A11: role -> LiteLLM model alias
|
|
executor: local-fast # the local tier; the benchmark picks the model
|
|
planner: claude-opus-5-5 # high-end judgement: plans a weaker executor follows
|
|
delegate: claude-opus-5-5 # takes over what the executor got stuck on
|
|
consultant: claude-haiku-4-5 # one question at a time, no tools: cheap is enough
|
|
|
|
matrix: # A1
|
|
homeserver: https://matrix.example
|
|
user_id: "@nisse-dev:example"
|
|
token: ${NISSE_MATRIX_TOKEN}
|
|
room_id: "!roomid:example"
|
|
operators: ["@you:example"]
|
|
|
|
gitea: # B2
|
|
url: https://gitea.example
|
|
token: ${NISSE_GITEA_TOKEN}
|
|
repo: owner/demo-repo
|
|
operators: [your-gitea-login]
|
|
base_branch: main
|
|
|
|
# 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, head and tail
|
|
context: # fitting each request into the model's window
|
|
keep_recent_turns: 6 # turns never cut or dropped
|
|
safety_margin: 0.1 # fraction of the window held back
|