Skip to main content

AgenticEvalConfig

Struct AgenticEvalConfig 

Source
pub struct AgenticEvalConfig {
    pub model_id: i64,
    pub task_suite: TaskSuite,
    pub weights: Option<ScoreWeights>,
    pub ctx_size: Option<u64>,
    pub seeds: Vec<u32>,
    pub include_control: bool,
    pub replicate_raw: bool,
    pub replicate_pairs: usize,
    pub control_seeds: usize,
}
Expand description

Configuration for one A/B agentic eval run.

Fields§

§model_id: i64

Database ID of the model to evaluate.

§task_suite: TaskSuite

Task suite both arms run — the same schema the tune sweep uses.

§weights: Option<ScoreWeights>

Weights for each arm’s composite score.

None means “the server decides”; see TuneConfig::weights, which also explains why skip_serializing_if is required rather than cosmetic.

§ctx_size: Option<u64>

Context size override (tokens). None resolves through the harness’s own chain (model server defaults → global setting → hardcoded default), which deliberately stops short of the fitted rung a real launch reaches — so a benchmark taken with nothing configured is taken at the floor. Recorded in ADR 0009’s amendment; not the serving path’s chain.

§seeds: Vec<u32>

RNG seeds to repeat every task under, once each.

§Why more than one

A single sample per task is not a measurement of a model, it is one draw from its output distribution. Two runs of the identical raw configuration have scored 0.728 and 0.543 on this suite — a gap wider than most of the effects the eval exists to detect. Averaging a handful of seeds is what separates a real difference from that spread.

Seeded rather than merely repeated, so a surprising number can be re-run and reproduced instead of chased. An empty list means one unseeded run per task, which is the pre-multi-seed behaviour and is kept reachable deliberately — it is the fastest smoke test.

§include_control: bool

Whether to run the positive control arm. See EvalArm::Control.

§replicate_raw: bool

Whether to run the A/A arm. See EvalArm::RawReplicate.

On by default, and cheap: the raw arm is the fastest of the three, so repeating it costs a fraction of what the control does and is the only thing in the report that speaks to the size of an effect rather than its direction.

§replicate_pairs: usize

How many A/A pairs to run. See EvalArm::RawReplicate.

1 is the historical single-pair behaviour and the default. A single pair estimates the eval’s drift from one degree of freedom — enough to stop a delta inside its own noise being called a finding, and not enough to say how noisy the eval actually is. Every additional pair re-runs the raw arm on another derived, disjoint seed set, and the drift estimate becomes the mean pairwise gap over all replicate runs plus the primary — which is the “more pairs” the EFFECT_NOISE_RATIO doc has always named as the honest strengthening.

§control_seeds: usize

How many of Self::seeds the positive control repeats, from the front. Clamped into 1..=seeds.len().

§Why this is not the full seed set

Because the control is the most expensive arm in the eval by an order of magnitude, and it does not need the precision. Measured on Qwen3.5-4B: broken sampling makes the model ramble, so the control took 161 of one run’s 174 wall-clock minutes and generated 5× the tokens of the two real arms combined.

It can afford to be imprecise because of what it is asked. The two real arms are being compared to each other and need every seed they can get; the control only has to clear CONTROL_MIN_COMPOSITE_GAP, and the gap it actually opens is an order of magnitude above that threshold. Paying five seeds to resolve a 0.5 gap more precisely buys nothing the report reads.

Trait Implementations§

Source§

impl Clone for AgenticEvalConfig

Source§

fn clone(&self) -> AgenticEvalConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AgenticEvalConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for AgenticEvalConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for AgenticEvalConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,