Skip to content

IEBP002: model_role_resolution

get_model(role=...) resolves deliberately: an explicit model, default= or required=True.

Category: best_practices · Applies to: eval, helper · Allowlist: [tool.inspect-evals-lint.allowlists.model_role_resolution]

What it does

Flags each get_model(role=...) call that passes no explicit model, no default= and no required=True. A literal default=None, model=None or required=False changes nothing at runtime and does not count. Each diagnostic is keyed by the role name (<dynamic> for a non-literal), which is what an allowlist entry names.

Why is this bad?

A role that is not bound at invocation falls back to the model under evaluation. A grader then grades the model's own output, and the scores still look plausible. Pinning a default or requiring the role makes the fallback a choice rather than an accident.

Example

grader = get_model(role="grader")

Use instead:

grader = get_model(role="grader", default="openai/gpt-4o")
# or
grader = get_model(role="grader", required=True)

Options

  • allowlists.model_role_resolution: { package = ["role"] } entries reported as warnings while an existing surface is burned down.

Suppress on a line with # inspect-evals-lint: ignore[IEBP002] or ignore[model_role_resolution]; select or ignore it in configuration by either, or by the prefix IEBP.