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

  1. Pass a positive number: --timeout-multiplier 1.5 to extend timeouts 50%, or 1 for defaults
  2. If generating the value, default it to 1.0 rather than 0
  3. 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

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

Related errors


AI-assisted analysis of aaif-goose/goose@3810898a74 (2026-08-16). Data as JSON: /api/errors/a5deabf4a7461030. Report an issue: GitHub.