Usefulness calculations

Each entry below is a function turning main-task outcomes into a usefulness number, selected by name with usefulness_calculations.get(name). Names, arguments, and defaults are read from the usefulness_calculation registry, so this page cannot drift from the code.

Adding one

from control_tower.metrics.usefulness_calculations.registry import usefulness_calculations @usefulness_calculations.register() def my_usefulness_calculation(...): ...

Every non-underscore module under the registry's discovery package is imported on first lookup, so the decorator is all the registration a new usefulness_calculation needs.

Registered usefulness calculations

defer-to-trusted

Blended usefulness under sus-score deferral to a trusted model.

Defined in control_tower.metrics.usefulness_calculations.impls.defer_to_trusted._defer_to_trusted.

ArgumentTypeDefaultDescription
trustedRunLikerequired
defer_fprfloatrequired

main-task-success

Main-task success rate over the honest set, with a Jeffreys 95% CI.

Usefulness is a genuine binomial proportion (successes out of scored trajectories), so :func:proportion_ci applies. The CI flows into the graph pareto usefulness error bars via ParetoPoint.usefulness_ci.

With no scored trajectory the proportion is unmeasurable: both usefulness and usefulness_ci are None.

Defined in control_tower.metrics.usefulness_calculations.impls.main_task_success.main_task_success.