aaif-goose/goose · error · ValueError
--timeout-multiplier must be positive
Error message
--timeout-multiplier must be positive
What it means
Raised by build_harbor_config in the harbor benchmark runner when --timeout-multiplier is zero or negative. The multiplier scales per-task timeouts (fractions like 1.5 or 2 are valid); zero or negative would collapse every timeout to nothing, so it is rejected during argument validation before the harbor config dict is built.
Source
Thrown at evals/harbor/runner.py:134
name, sep, ref = dataset_ref.rpartition("@")
dataset_name = name if sep else dataset_ref
dataset: dict[str, Any] = {"name": dataset_name}
if sep:
dataset["ref" if "/" in name else "version"] = ref
if tasks:
dataset["task_names"] = tasks
return dataset
def build_harbor_config(args: argparse.Namespace) -> dict[str, Any]:
if "/" not in args.model:
raise ValueError("--model must be in provider/model form, e.g. anthropic/claude-sonnet-4-6")
if args.trials < 1:
raise ValueError("--trials must be at least 1")
if args.concurrency < 1:
raise ValueError("--concurrency must be at least 1")
if args.timeout_multiplier <= 0:
raise ValueError("--timeout-multiplier must be positive")
goose_binary = args.goose_binary.expanduser().resolve()
if not goose_binary.is_file():
raise ValueError(f"--goose-binary does not exist or is not a file: {args.goose_binary}")
config_yaml, extension_entries = render_goose_config(args.extensions)
provider = args.model.split("/", 1)[0]
missing_secrets = [
key for key in PROVIDER_SECRETS.get(provider, []) if not os.environ.get(key)
]
if missing_secrets:
raise ValueError(
f"Missing env vars for provider '{provider}': {', '.join(missing_secrets)}. "
f"Set them in a .env file (cwd or {HARBOR_DIR}) or your shell."
)
agent_kwargs: dict[str, Any] = {View on GitHub (pinned to 3810898a74)
Solutions
- Pass a positive number: --timeout-multiplier 1.5 to extend timeouts 50%, or 1 for defaults
- If generating the value, default it to 1.0 rather than 0
- Check for accidental string suffixes or locale-specific decimal commas in the value
Defensive patterns
Strategy: validation
Validate before calling
assert args.timeout_multiplier > 0, f'--timeout-multiplier must be positive, got {args.timeout_multiplier}' Prevention
- Default the multiplier to 1.0 in wrappers, not 0
- Pass plain numbers (1.5, 2) without units or suffixes
- Remember fractions are valid; only zero and negatives are rejected
When it happens
Trigger: Running with --timeout-multiplier 0; a negative value like --timeout-multiplier -1; passing '2x' style strings that argparse fails to parse into a number at all.
Common situations: Misreading the flag as a boolean/flag-style switch; unit confusion (minutes vs multiplier); scripts defaulting the multiplier to 0 before it is set.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- Job name must start with a letter or number and contain only
- --model must be in provider/model form, e.g. anthropic/claud
- --trials must be at least 1
- --concurrency must be at least 1
- --goose-binary does not exist or is not a file: {args.goose_
AI-assisted analysis of aaif-goose/goose@3810898a74 (2026-08-16).
Data as JSON: /api/errors/a5deabf4a7461030.
Report an issue: GitHub.