Skip to main content

Context

Struct Context 

Source
pub struct Context {
    pub items: Vec<AdmittedItem>,
    pub evicted: Vec<EvictionRecord>,
    pub budget: TokenBudget,
}
Expand description

Γ — the exact admitted token window. Immutable, fully attributed.

§Example

use boundgraph_core::{AdmittedItem, Context, ContextSource, Digest, EvictionReason,
                EvictionRecord, TokenBudget};

let ctx = Context::new(
    vec![AdmittedItem {
        source: ContextSource::Prompt,
        digest: Digest::of(b"task"),
        tokens: 120,
        reason: "declared by the step".into(),
    }],
    vec![EvictionRecord {
        source: ContextSource::Retrieval,
        digest: Digest::of(b"a long document"),
        tokens: 9_000,
        reason: EvictionReason::BudgetExhausted { needed: 9_000, remaining: 880 },
    }],
    TokenBudget(1_000),
)?;

assert_eq!(ctx.admitted_tokens(), 120);
// The law is auditable: we can say exactly what was withheld, and why.
assert_eq!(ctx.evicted.len(), 1);

Fields§

§items: Vec<AdmittedItem>

What the reasoner actually saw.

§evicted: Vec<EvictionRecord>

What it did not, and why.

§budget: TokenBudget

The ceiling this admission ran against.

Implementations§

Source§

impl Context

Source

pub fn new( items: Vec<AdmittedItem>, evicted: Vec<EvictionRecord>, budget: TokenBudget, ) -> Result<Self, ContextOverBudget>

Build a context, enforcing the budget invariant.

§Errors

Returns ContextOverBudget if the admitted items exceed budget. This is deliberately a hard error rather than a silent truncation: an admitter that overruns has broken Law II, and quietly dropping the tail would hide that while also losing the eviction record that explains it.

Source

pub fn empty(budget: TokenBudget) -> Self

An empty window under a given ceiling.

Source

pub fn admitted_tokens(&self) -> u32

Tokens actually admitted. Never exceeds Context::budget.

Source

pub fn headroom(&self) -> u32

Tokens left unused under the ceiling.

Source

pub fn evicted_tokens(&self) -> u32

Tokens that were considered and refused.

A large number here against small headroom means the budget was the binding constraint; a large number against ample headroom means something was withheld for another reason, which is usually the more interesting case when debugging.

Source

pub fn why_evicted(&self, digest: &Digest) -> Option<&EvictionReason>

Whether this item was considered and refused, and if so why.

This is the “why did the agent not know X?” query.

Source

pub fn admitted(&self, digest: &Digest) -> bool

Whether this item made it into the window.

Trait Implementations§

Source§

impl Clone for Context

Source§

fn clone(&self) -> Self

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 Context

Source§

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

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

impl<'de> Deserialize<'de> for Context

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 Eq for Context

Source§

impl PartialEq for Context

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for Context

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
Source§

impl StructuralPartialEq for Context

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> Canonical for T
where T: Serialize + ?Sized,

Source§

fn canonical_bytes(&self) -> Result<Vec<u8>, CanonicalError>

The canonical CBOR encoding of this value.
Source§

fn digest(&self) -> Result<Digest, CanonicalError>

The blake3 digest of this value’s canonical encoding.
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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 = !

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

fn try_from(value: U) -> Result<T, !>

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V