diff --git a/README.md b/README.md index fe1b76f..fb64828 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,10 @@ Every finding carries one judgment (`evaluator/Evaluator.go`): - `trajectory/` — the `Run`/`Step` model, the JSON loader, and `Validate()` (structural invariants: ids, timestamps, per-type required fields). - `evaluator/` — the `Evaluator` interface and the evaluators: - - `tool_calls` — pairs tool calls with results (by tool name, in order) and - flags orphans (neutral) and tool errors (bad). + - `tool_calls` — pairs each tool result with its call by `toolCallId` when + present (authoritative, order-independent), falling back to tool name in FIFO + order only when a result carries no id; flags orphans (neutral) and tool + errors (bad). - `loops` — flags repetition (same tool plus identical input, or same node) at least `MaxRepeats` times; catches runaways the pairing check cannot see. - `cost_latency` — flags per-step and whole-run cost/latency budget breaches diff --git a/cmd/trazo/main.go b/cmd/trazo/main.go index 6f14639..7f7613c 100644 --- a/cmd/trazo/main.go +++ b/cmd/trazo/main.go @@ -8,6 +8,7 @@ import ( "os" "os/signal" "strings" + "syscall" "time" "github.com/Cro22/trazo/config" @@ -141,7 +142,7 @@ func main() { // Cancel in-flight evaluation on Ctrl+C (SIGINT) or SIGTERM so a long run, // notably one using the network-bound LLM judge, stops promptly. - ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) + ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() start := time.Now()